因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。后面的那个不会发生类型的提升,是在其基础上加了一个1,还是short型,所以不会出错。

解决方案 »

  1.   

    请问quiton(蛛蛛):1是int型为什么可以赋给short型的s1呢?
      

  2.   

    short s1 = (short) 1  
      

  3.   

    s1 = s1 + 1和s1 += 1没什么区别啊
      

  4.   

    所有的byte型,short型和char型的值在运算时将被提升为int型
      

  5.   

    s1 = s1 + 1和s1 += 1是有区别的。
    s1=s1+1会错因为s1是short,而1是int,所以运算时会自动转换为int,再将int赋值给s1是需要强制转换,所以会错。
    JAVA规范上说 e1+=e2 实际上是 e1=(T1)(e1+e2),其中T1是e1的数据类型。 s1+=1等效于 s1=(short)(s1+1),所以是正确的。