对于short a=1; a=a+1; 由于a+1运算时会自动提升表达式的类型,也即int类型,再将结果赋值给short类型的a时,类型会不匹配;
对于short a=1; a+=1; java编译器会对+=进行特殊处理,进行了类型转换,通过反编译.class源码可以看到a+=1被编译为:
a=(short) (a+1)
short a=1;
a=a+1; //类型不兼容,报错,int类型不能转换成short,从int转换到byte可能会有损失
short b=1;
b+=1;
注意:+=不会进行溢出检查,
1 byte b=127;
2 b+=1;
3 System.out.println(b);
输出结果是-128,开发中要特别注意