short i=1;i=i+1;为什么报错?

先测试,看结果:

 提示我们说不能将short类型的转化为int类型!

 

先不急着下结论,我们继续测试,用i+=1;

我们发现并没有报错,为什么同样是加1,会出现这样两种不同的结果呢?

查阅了一些资料,大多数都说明都是整数默认为int型,所以不能i+1后,会隐式转化成int型,但是为什么short i=1;就可以进行转换呢?

这样的说法很难服众,不严谨,

 

进一步测试,输出这个过程中它们的类型:

 

 

 我们发现,i+1的类型是int型,i=1和i+=i后的类型还是short型,

这个时候我们发现这三个有一些不同的方法了,=与+=是赋值运算符,+是算数运算符

算数运算符

 

 

 

赋值运算符

 

 

 

 结论:

这个与运算符的类型有关,只要是发生了算数运算,此时就会把结果转化为int。
是由于开发者考虑到,人们在计算的时候,大多会忽略取值这个范围
所以为了简化底层逻辑,开发者设计,当没有任何关键字的时候,当接收到了
 byte、short、char这些数据类型,进行数学运算时,会在这个过程中
 将其转化为int类型!

 

扩展测试:

 

 字符‘a’的unicode码为97,

97+1+2=100,显然没有超出short的取值范围,所以不应该是因为超出范围进行了数据类型的转换,

此时我们就理解成,因为字符型的转换,这个过程成了int,那么我们去除char字符,再进行测试:

 

 我们发现还是报错了!

综上所述,我们前面提到的结论成立!

posted @ 2021-02-05 10:46  ChenXingEn  阅读(93)  评论(0编辑  收藏  举报