黑马程序员技术交流社区

标题: 两个式子的不同意思 [打印本页]

作者: 1262734817    时间: 2014-5-19 14:32
标题: 两个式子的不同意思
S=S+2与S+=2到底有什么不同?

作者: Seraphim    时间: 2014-5-19 15:32
效果是一样的,但是S=S+2有可能会发生类型转换,比如当S是byte型时,S+2在执行时会将S转换为int型数据,然后再进行S+2的运算,返回结果将是int型,这时候再赋值给byte型的变量S会报错;而S+=2不会出现这样的问题,因为+=运算符不会发生类型转换
作者: 饥渴ing    时间: 2014-5-19 18:07
本帖最后由 饥渴ing 于 2014-5-19 18:22 编辑

假设S为int类型。 s=s+2;编译时是将局部变量s压入到栈然后把2压入到栈在执行iadd,最后将结果弹出栈存到局部变量s
其他基本类型s=s+2和s+=2一样.(boolean除外)
S为String对象时.两个表达式都是创建一个StringBuilder然后append();.

作者: 千里一醉    时间: 2014-5-19 19:19
short s;  声明变量,s为short类型的变量
s = s + 2;  2为整数,在java中默认存储为int类型的值,所以 s+2生成的结构为int类型的值,然后要将int类型的值赋给声明short类型值的s,不能自动类型转换,这里需强制转换才行。
s+=2;当进行+=运算符给s赋值时,将自动完成强制转换操作。
作者: jsjchenlong    时间: 2014-5-19 20:00
同意二楼说的
作者: liang090214    时间: 2014-5-19 22:04
如果声明的s是short类型,例如:
short s =2
s =s+2编译的时候会报错,因为s+2的时候会提升为int类型,然后再赋给short类型的s时会报错:损失精度。
s+=2则可以通过编译,因为它内部会有一个自动转换过程。
这应该是它们的主要区别
作者: 郝义涛    时间: 2014-5-19 23:53
s+=2  相当于s=(s的类型)(s+2),




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