x-=32; // 包含了一个丛碰隐藏的转型!x=x-32;却没有隐藏的转型,需要自己强制转换,整数默认是int型的这个问题在《java解惑》一书的谜题9中有详细解释 现在该轮到你来写些代码了,好消息是,你只需为这个谜题编写两行代码,并为下一个谜题也编写两行代码。这有什么难的呢?我们给出一个对变量x和i的声明即可,它肯定是一个合法的语句: x += i;但是,它并不是: x = x + i;许多程序员都会认为该迷题中的第一个表达式(x += i)只是第二个表达式(x = x + i)的简写方式。但是这并不十分准确。这两个表达式都被称为赋值表达式。第二条语句使用的是简单赋值操作符(=),而第一条语句使用的是复合赋值操作符。(复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=)Java语言规范中讲到,复合赋值 E1 op= E2等价于简单赋值E1 = (T)((E1)op(E2)),其中T是E1的类型,除非E1只被计算一次。换句话说,复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。如果结果的类型与该变渗旦谈量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符迟前将悄悄地执行一个窄化原始类型转换。因此,我们有很好的理由去解释为什么在尝试着执行等价的简单赋值可能会产生一个编译错误。——摘自《java解惑》
相关文章
-
强制隔离戒毒和社区戒毒的时间分别是多久
2023-07-28 03:33 阅读(618) -
Java数组的长度到底能有多大
2023-07-24 20:33 阅读(628) -
java的主类是什么
2023-07-23 01:36 阅读(575)
1 强制传唤和拘传的区别是什么。注意不是“传唤”是“强制传唤”
579 阅读
2 java double和float的区别
631 阅读
3 java 中double如何转为string
573 阅读
4 JAVA中枚举是什么意思,怎么用
602 阅读
5 JAVA Graphics类中drawImage方法怎么用
589 阅读