short s = 1; s = s + 1;
这个编译一定是不通过的,会提示损失精度。
short s = 1; s += 1;
这个编译反而可以通过。
隐式类型转换可以由小到大自动转,即byte →short →int →long,如果反过来会损失精度,必须进行显式类型转换。
s+=1的意思与s=s+1不同
s=s+1这句话先执行s+1,然后把结果赋值给s,因为1是int类型,所以s+1的值就成了int型,这叫自动类型提升。
编译器自动进行了隐式类型转换,所以将一个int类型的值赋给了short就会出错。
而s+=1不同由于是+=操作符,在解析的时候s+=1就等价于s=(short)(s+1),也就是说s+=1↔s=(s的类型)(s+1)