java,s+=1?

short s=1;
s=s+1;错误,s+=1;为什么正确?

1、 short s=s+1
会出现编译错误。s+1的时候,结果会被“升格”为int类型。把int赋给short当然编译错误。

2、 s+=1
对于“+=”操作,系统会自动执行类型转换操作,等价于s=(short)s+1。

3、java的自动转型是从小到大,而100.2是一个int型的数,不会自动转成short类型的,而后者却会自动转。赋值运算的优先级最低,而+=的优先级就不一样了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-11
类型转换问题嘛,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都可以的本回答被提问者采纳
第2个回答  2009-05-24
s=s+1是一个加法运算,里面的1是一个int,运算结果int不能对short变量赋值。
s+=1是一个增值运算,没有把计算结果并对变量赋值的步骤,所以正确。
第3个回答  2009-05-24
按照书上理论来讲

这两个表达式都是正确的

s+= 即 s=s+
第4个回答  2016-08-16
在java中我不怎么清楚。
但是在c++中s
+=
1的效率高
但是在c++中采用这种符合运算符,一是为了简化程序,使程序精练,二是为了提高编译效率,有利于编译,能产生质量较高的目标代码。如果你没有学过编译原理,就跳过这个问题