案例一
publicclassHelloWord { // 执行结果是?publicstaticvoidmain(String[] args) { shorta=1; a=a+1; System.out.print(a); } }
结果:编译报错
分析:
案例二
publicclassHelloWord { publicstaticvoidmain(String[] args) { shorta=1; a+=1; System.out.print(a); } }
结果:运行通过
分析:
Java 语言规范中关于复合赋值的解释是这样的:E1 op=E2 等价于 E1=(T)(E1 op E2),这里的T是E1的数据类型,看到这里 ,大家应该豁然开朗了,原来这个复合赋值是自带了隐式的强制类型转换的。
案例三
publicclassHelloWord { publicstaticvoidmain(String[] args) { shorta=1; shortb=1; shortc=a+b; System.out.print(c); } }
结果:编译报错
分析:
精度小于 int 的数值运算的时候都回被自动转换为 int 后进行计算。
正确写法:
publicclassHelloWord { publicstaticvoidmain(String[] args) { shorta=1; shortb=1; shortc= (short)(a+b); System.out.print(c); } }