首先,short类型是16位的,而int类型是32位的,int 转short 精度可能会丢失。其次,我们可以把其看作:
short s1 = 1;
int i = 1;
s1 = s1 + i;
运算时,自动将i提升到32位,然后与1相加,得到的结果是32位的,而此时s1= s1+i
必然报错, 因为如果赋值成功,只是把short类型赋给了i,这个虽然正是我们想要的结果,但是编译程序却不能判定其意图是什么。把大容量类型转换成小的容量类型,需要强转s1=(short)(s1+i)
; s1+=i
能编译通过并得到正确结果,而 s1=s1+i; 却报错,是因为它们并不是等价的,s1+=i
的方式java会对i进行自动类型转换,由编译程序自动执行.