今天偶然在一个群里看到这个题目,自己居然一下子没有看出问题来,短暂的几秒钟后恍然大悟
我们先看看:short s=1;s=s+1
我们知道short是16位的,为数字1是int类型的,是32位的
一个16位和32位的数据相加,肯定会数据溢出的。编译并不会通过
但是我们可以这样
int s1 = s +1;
或者 s = (short)(s+1)
原因在于,java中,您可以将低精度的数字赋值给高精度的数字型变量,反之就要进行强制类型转换
我们再来看看:short s=1;s+=1 ,这个编译是通过的,并且会得到结果
对于s+=1;个人理解是这样的,他是在原由的s基础上扩充到了int类型,然后加上1,再强制转换成了short类型
既是s+=1 等价于 s = (short)(((int) s)+1);
不难发现,其实 s = (short)(s+1) 和 s = (short) ( ( (int) s )+1 ); 是一样的。
所以经过改正后的 s = (short)(s+1) 与 s+=1是一样的哦
大家如有不同意见 欢迎发表回复哈
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情