> 文档中心 > short i=1;i=i+1;为什么报错?

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字符,再进行测试:
在这里插入图片描述
我们发现还是报错了!

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