黑马程序员技术交流社区

标题: s = s + 5; 与 s+=5;区别? [打印本页]

作者: chuanyueing    时间: 2013-2-19 16:29
标题: s = s + 5; 与 s+=5;区别?
前段时间记得看过这个问题,今天突然又想起来查了半天资料没有找到答案,哪位大侠解答下。
s = s + 5; 与 s+=5;区别?
作者: 曹春贵    时间: 2013-2-19 16:33
结果一样,只是不同的写法而已
作者: 寇弘禄    时间: 2013-2-19 16:48
如果s是int型的,应该是没区别。
如果s是short型的,s=s+5 的写法错误,s+=5 的写法正确。因为一个short型的和一个int型的相加后提升为int型,无法赋给short型的s,应改为s=(short)(s+5);
作者: chuanyueing    时间: 2013-2-19 16:51
zuiaikou 发表于 2013-2-19 16:48
如果s是int型的,应该是没区别。
如果s是short型的,s=s+5 的写法错误,s+=5 的写法正确。因为一个short型 ...

谢谢了:)
作者: 燕国庆    时间: 2013-2-19 16:55
s=s+5  是进行两步计算:1.先将s的值与5相加   2.相加之后将他们的值赋值给s.

s+=5  是一步计算: 符号两端运算完赋值给左边,意思相似与赋值。

还有一个区别:
涉及到类型提升的问题:
例如  short x=4;
a.  x=x+5; 此时会出现问题
b. x+=5;  此时就没问题,此语句的意思相当于赋值,相加所得的数判断是否在short类型的范围内。
作者: 洪建超    时间: 2013-2-19 16:59
short s=s+1
会出现编译错误。s+1的时候,结果会被“升格”为int类型。把int赋给short当然编译错误。
② s+=1
对于“+=”操作,系统会自动执行类型转换操作,等价于s=(short)s+1
和楼上给的差不多,请参考
作者: 洪建超    时间: 2013-2-19 17:02
s=s+1



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





short s=s+5
会出现编译错误。s+5的时候,结果会被“升格”为int类型。把int赋给short当然编译错误。
② s+=5
对于“+=”操作,系统会自动执行类型转换操作,等价于s=(short)s+5和楼上给的差不多,请参考
刚把数字打错了,嘿嘿

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

作者: 胥文    时间: 2013-2-19 17:07
short s =3;
s=s+5;//这句会编译失败,因为s与5相加的时候会有一个类型提升(自动转换成int类型),赋值给short类型的时候会丢失精度,jvm会报错
s+=5;//编译通过,+=运算符在给s赋值的时候,自动完成了强转操作;
作者: chuanyueing    时间: 2013-2-19 21:10
亲们,彻底懂了,谢谢你们认真的回答{:soso_e100:}
作者: 罗正荣    时间: 2013-2-19 23:32
本帖最后由 罗正荣 于 2013-2-19 23:34 编辑

再来补充一点
如果s是int型的,应该是没区别。
如果s是byte型的也不可以
还有其他的+=, -=, *=, /=, %=这些都需要注意哦
还有记得当问题得到解决时记得把帖子改为已解决{:soso_e113:}
作者: 吴俊旭    时间: 2013-2-20 17:29
二楼正解
作者: 冯飞    时间: 2013-2-20 17:36
这个要看s的类型,如果s是int型的,s+=5与s=s+5是没有区别的。
但如果s是short型,s=s+5则会出错,因为5是int型,执行s+5时会把s从short型强制转换成int型,计算出的结果再赋予short型的s,当然会出错。
而s+=5则是把s+5的结果强制类型转换成short型后再赋予s。
作者: 徐升2013    时间: 2013-2-20 17:42
燕国庆 发表于 2013-2-19 16:55
s=s+5  是进行两步计算:1.先将s的值与5相加   2.相加之后将他们的值赋值给s.

s+=5  是一步计算: 符号两 ...

受教了,答的很详细
作者: 黑马刘杰    时间: 2013-2-20 17:50
黑马论坛里有这个解释http://bbs.itheima.com/thread-14710-1-1.html
作者: 燕国庆    时间: 2013-2-20 18:18
起航 发表于 2013-2-20 17:42
受教了,答的很详细

共同进步:handshake
作者: 高贵杰    时间: 2013-2-22 10:11
这个问题毕向东老师在视频中讲过了,楼主要是实在不明白,去看毕老师的java基础视频吧,“赋值和比较运算符”那一章,还是重点讲的呢。
作者: lzt1832    时间: 2016-1-1 11:58
寇弘禄 发表于 2013-2-19 16:48
如果s是int型的,应该是没区别。
如果s是short型的,s=s+5 的写法错误,s+=5 的写法正确。因为一个short型 ...

在理~^_^
作者: WOLAILE    时间: 2016-1-20 10:10
kan kan er yi




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2