请问哪位知道为什么如下写法编译正确?
short s1 = 1;
s1 += 1;

解决方案 »

  1.   

    它支持upcasting( 翻译成中文就跟楼上 所说的一样了...)
    建议,如果你不是初学者的话,看看Thinking in java
      

  2.   

    我想问s1 += 1和s1 = s1 + 1有什么区别?
      

  3.   

    s1 = s1 + 1是不能通过编译的,但s1 += 1为什么能呢?能解释清楚点吗,谢谢了.
      

  4.   

    s1 += 1相当与s1 =(short)s1+1
      

  5.   

    这里1默认为int型,short是16位,int是32位,s1+1运算是自动把s1提升到32位,运算之后再赋值给16的short型变量,所以出错~!s1 += 1相当与s1 =(short)s1+1 进行了类型转换,所以可以编译通过~!
      

  6.   

    s1 += 1相当与s1 =s1+(short)1
      

  7.   

    应该是s1 += 1相当与s1 =s1+(short)1
    而不是s1 += 1相当与s1 =(short)s1+1
      

  8.   

    java规范中说:
    E1 op=E2 实际上等价于 : E1=(T)( (E1)op(E2) )
    其中T是E1的数据类型.
      

  9.   

    不好意思,s1 += 1相当与s1 =(short)(s1+1)