short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 前面的就不说了,都看的出来。后面这个答案是没错,s1+=1是对的,但是大部分人给的答案是这样的: 对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。什么叫特殊处理什么意思,本着一根筋的精神倒想看看怎么个特殊处理。事实上,这个+=是复合赋值操作符,Java语言规范中讲到,复合赋值(E1op=E2)等价于简单赋值(E1=(T)((E1) op (E2)))。通俗一点就是复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型,也就是进行了强制转换。就酱啦~
|