short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)-----------------------------
第一个有问题,第二个没问题,是什么机制导致这个区别? 我翻了一下thinking in java,没找到相关的内容

解决方案 »

  1.   

    short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) 
    short s1 = 1; s1 += 1;(可以正确编译) s1+1;在JVM里,因为1常量是int型的,而s1是short型,JVM转换类型只能由小范围转到打范围(如把short转成int,float转成double),所以在计算的时候把s1当成int计算了,然后就是一个赋值操作,返回当然就是int型了s1 += 1;这个不是赋值操作,只是纯粹的吧s1加1的过程!纯碎是个人理解的看法,至于正确的解释,看来还需要继续翻阅资料
      

  2.   

    转型问题,int+short 返回值是intint+float 返回值是float
    在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为
    (byte,short,char)--int--long--float--double
    简单数据类型之间的转换又可以分为:
     ●低级到高级的自动类型转换
     ●高级到低级的强制类型转换
    注意低级向高级是自动转换的。