Java程序中的问题 short s1=1; s1+=1;为什么编译不出错?精度会损失吗?

来源:百度知道 编辑:UC知道 时间:2024/07/02 19:08:45

1-> s1=s1+1; 2-> s1+=1;
1例 使用简单赋值运算, 2例 使用复合赋值运算,而简单赋值运算和复合赋值运算的最大差别就在于:复合赋值运算符会自动地将运算结果转型为其左操作数的类型! 这就是1例编译不通过,2例编译却能通过的原因。

精度取决于他们相加的结果是否超过short所能表达的最大值,超过就丢精度 反之不丢~~

short s1=1;则换句不会出错不用说了吧?就是一个简单的赋值!s1+=1这句和si=si+1还存在区别,如果是s1=si+1那肯定会出错了!前边是一个短整形,后边s1是短整形,1默认为int型,相加时候短整形自动向上转换后边的s1转换为int,加1后仍然为int,这时候要int赋值给short这是不行的,所以会报错!但是short+=1就不一样了,这个算复合运算了,这句隐含一个意思是右边运算完成无论是什么类型都要强制转换到左边的short!就相当于short=(int)(short+1).OK

为什么会丢失精度呢 short 本身就是整型的 只不过 取值范围要小些

这个不会出错,在此 1 被当成short类型!

这样才会出错:short s1=1; s1=1+s1;
在此1+s1是返回int类型,不能自动转换!

这样也是对的:short s1=1; s1=(short)(1+s1);

不是为什么不出错,而是你为什么觉得会出错

你觉得会出什么错?