解决方案 »

  1.   

    s+=1;  和 s=s+1;
    并不等价
    s+1这个表达式返回的是一个整形数字
      

  2.   

    这里涉及到向上和向下兼容的问题,如,一个整型和一个浮点型运算,结果会是一个浮点型,一个浮点和一个双精度运算,结果是双精度,程序总能向大的类型去容纳小的类型(我这里用大和小来表示不太符合,明白我说的是啥就好).s+=1;s++等运算符是自身相加,类型不变,而s=s+1;其实是分两步的,第一步先算s+1;这里1是整型,向大兼容,得出结果是整型,然后再把这个整型赋值给s,这当然是不行的,所以必须得转换.但是反过来,如果s是浮点型的话,会怎样呢,是的,不需要强转,因为向大兼容.
      

  3.   

    这个怎么解释
    short a=1;
    short b=2;
    short c=3;
    a = b+c;    // a 是什么型
      

  4.   

    @momoyssy and rumlee
    s是short型,s+1是short+int,java会自动将类型提升变换为int+int,所以得到的结果还是int,是无法将short=int+int的,需要做一个类型强制转换,s=(short)(s+1).
    s+=1的意思不能跟上面那样理解,它表示的就是每次自增1,就好像s++,++s一样,无非这里指定了你每次自增的值是多少,你也可以写成s+=2,s+=3都可以的