题目:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
解答:
Java规范有这样的规则 1.高位转低位需要强制转换 2.低位转高位自动转. 对于short s1 = 1; s1 = s1 + 1: 1 是int 型 s1是short型 通过 + 运算后s1 自动转为int 型,等号右边的结果是int,应该使用强转 short s1 = 1; s1 += 1:
+和+=这两个表达式都被称为赋值表达式。(x = x + i)表达式使用的是简单赋值操作符(=),而(x += i)表达式使用的是复合赋值操作符,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。 换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。 所以s1+=1等效于 s1=(short)(s1+1),所以是正确的。
|