日期:2014-05-20  浏览次数:20752 次

一个java基础的东西。
3、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答案是前面错了 后面对了
但是这两个到底有什么区别啊!
第一个s1=s1+1 后面的1是int 。s1是short。 short+int=int 但是s1是short 所以要强制转换(不知道理解是否正确)
但是这第二个:s1 += 1不就是等价于 s1=s1+1 这样的话不就是和第一个相同了嘛?
那么s1=s1+1和 s1+=1到底有什么区别。
谢谢咯 呵呵!
有分析过程更好啊啊

------解决方案--------------------
其实关键问题就是,数字“1”,类型是 int。

而 s1 += 1,Java知道你企图做自增运算,所以会智能的变成 s1 = (short) (s1 + 1);

所以,你理解了区别了吧?
------解决方案--------------------
short 长度比int长度长,所以s1 = s1 + 1 首先会将右边的s1转换成为int型,然后得到的值是2,2为int型。编译器会隐式的将int转换成short。所以会错误。而s1+=1是叫编译器做自增运算,会将1直接定义成和short类型。所以正确
------解决方案--------------------
所有声明为short的类型变量在进行运算时都会自动转为int类型的变量,这样s1+1就不是short型的,而变成int类型的,这时再赋给还是short类型的s1就会报精度损失错误了,这样改下就不会报错了
s1=(short)(s1+1),试试看!
------解决方案--------------------
s1 += 1;
会自动转换