老调重弹:short s=1;s=s+1;与short s=1;s+=1;的区别。

今天偶然在一个群里看到这个题目,自己居然一下子没有看出问题来,短暂的几秒钟后恍然大悟

我们先看看: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/天,具体规则查看活动详情Blog Img