short s1 = 1; s1 = s1 + 1; short s1 = 1; s1 += 1;

前面一句中,s1 = s1 + 1需要进行强转,写成s1 = (short)(s1 + 1)。
后面一句没错。
1、Java规范有这样的规则
[
a.高位转低位需要强制转换
b.低位转高位自动转.
]
2、short s1 = 1; s1 = s1 + 1;中,1 是int 型 s1 short型 通过 + 运算后s1 自动转为int 型 所以错!
3、后面一句没有错是因为Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),而(s1 += 1)表达式使用的是复合赋值操作符,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。

转载于:https://my.oschina.net/u/3548498/blog/968093

你可能感兴趣的:(short s1 = 1; s1 = s1 + 1; short s1 = 1; s1 += 1;)