short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

不明白 short s1 = 1; s1 += 1 为什么正确?

高手解释下。 + 与 += 主要区别

搜索没有搜到

多谢。
...全文
1620 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lieves 2012-02-15
  • 打赏
  • 举报
回复


当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
• 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,
且运算结果与运算符左边数值类型相同。

在s1=s1+1;中,s1+1
运算的结果是int型,把它赋值给一个 short型变量s1,所以会报错;而在s1+=1;中,由于
是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是
short类型的,因此不会报错。那么,s1=1+1;为什么不报错呢?这是因为1+1是个编译时可
以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果
等同于s1=2,所以不会报错。前面讲过了,对基本类型执行强制类型转换可能得出错误的
结果,因此在使用+=、 -=、*=、/=、%=等运算符时,要多加注意。
qnprograme 2007-07-17
  • 打赏
  • 举报
回复
其实S1=S1+1,与S1+=S1在得到的结果是一样的,但是编译器处理的时候是不一样的。建议你看看编译原理。为什么会编译器会自动转成INT,这主要是精度的问题。
动感超油 2007-07-17
  • 打赏
  • 举报
回复
是不是编译器就是这么规定的,还是运算符的问题,至今我也搞不懂,我身边的同事也很困惑这个问题
bing3joe 2007-07-17
  • 打赏
  • 举报
回复
你这问题其实也多问 就好象1+1为什么等于2时对的一样;本来就是这样设计的啊!
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。这中间多处了个赋值的s1=s1+1的过程,就如你说的那样
而s1 += 1,没有赋值过程,可以理解为s++,就不需要类型的转换,或者也可以说是自动类型的转换;
记住就好了!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧