+= 运算符的问题

为何 short s1 = 1;s1 += 1;编辑能通过
而 short s1 = 1;s1 = s1+1; 编译会报错。
报错原因我知道,但是为何 s1 += 1 编译能通过呢

Java基础问题,好好去补一下吧,
[url]http://www.iteye.com/topic/434522[/url]
自己看看吧。

+=是一个特殊的运算,计算机计算时候是不考虑int类型自动转换的

这是java的自动提升基础类型机制
为何 short s1 = 1;s1 += 1;编辑能通过
而 short s1 = 1;s1 = s1+1; 编译会报错。
第一行,并没有将结果赋值给某个变量
而第二行将结果赋值给了一个short类型变量
但事实上,s1 += 1;的结果已经自动提升为了int类型
s1 = s1+1;就等价于将一个int值赋给一个short类型变量,所以编译报错

java的自动提升是因为寄存器是存储4个字节的
小于四个字节的类型:byte, short,char做运算后都会提升为int类型