short s1 = 1; s1 = s1 + 1;因为s1是short类型而1是int类型,在运算时s1会自动转换为int类型,但是结果的s1为short类型而运算是int类型,结果会报强制转换类型异常(ClassCastException);
正确书写格式为: s1 = short(s1+1);
注:Java规范有这样的规则:
a.高位转低位需要强制转换;
b.低位转高位自动转;
short s1 = 1; s1 += 1;在jvm里面是运算符重载,可以正常编译。
注:Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),而(s1 += 1)表达式使用的是复合赋值操作符,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。