第一个问题:short s1 = 1; s1 = 1 + 1;有什么错?
s1是short类型,可以自动转为int,但是 s1+1 在运算时,是会被提升为int类型进行计算,得到结果自然也是int类型,而int类型是无法自动转为short类型的,需要添加强转:(short)(1+1),并且这种强转会丢失精度;
第二个问题:short s1 = 1; s1 += 1;有什么错?
这个其实是没有错的,+=符号,在Java机制中,会被自动添加强转,也就是会变成 s1 = (short)(s1 + 1)来进行运算,这是由虚拟机进行特殊处理的,所以是可以编译通过的。