观察下面程序段是否有错误,若有错误,请指出并说明理由。
public class test {
public static void main(String[] args) {
short s = 1;
s = s + 1; //需强制类型转换,s = (short) (s + 1);
s += 1;
}
}
s = s + 1;错误。
原因分析:当short与int类型进行运算时,会自动提升为int类型,相加结果为int类型,赋值给byte类型,会造成精度损失。
s += 1;正确。
原因分析:通过+=、-=等运算符计算时,系统会自动强制类型转化,将s += 1;展开为s = (short) (s + 1);,故不会损失精度。