黑马程序员技术交流社区

标题: x+=y和x=x+y有什么区别 [打印本页]

作者: Ruby    时间: 2015-7-6 20:24
标题: x+=y和x=x+y有什么区别
x+=y;
x=x+y;有什么区别
作者: 钟志军zzj    时间: 2015-7-6 21:23
没啥区别好像效果一样
作者: q953655369    时间: 2015-7-6 21:24
前者默认强转 后者不强转
作者: 张恩祺    时间: 2015-7-6 21:25
现在看是没什么区别 但是有的时候进行赋值的时候x+=y隐藏一个强转.而内个就没有啦 !!!
作者: linjian931219    时间: 2015-7-6 21:29
我感觉没啥区别,要用具体数据来说,变量的话应该差不多
作者: 呆呆怪兽    时间: 2015-7-6 21:29
如果不涉及数据类型转换的话真是没区别~~
作者: zhuoxiuwu    时间: 2015-7-6 21:32
这两个表达式都被称为赋值表达式。
复合赋值 E1 op= E2 等价于简单赋值 E1 =(T)((E1)op(E2)),其中 T 是 E1 的类型,除非 E1 只被计算一次。
也就是说, 复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量
的类型。 如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。
然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行
一个窄化原始类型转换。
如 short x = 0;
int i = 123456;
x += i; // 包含了一个隐藏的转型!
你可能期望 x 的值在这条语句执行之后是 123456,但是并非如此,x的值是
-7,616。
int 类型的数值 123456 对于 short 来说太大了。自动产生的转型悄悄
地把 int 数值的高两位给截掉了





作者: home7192    时间: 2015-7-6 21:36
x+=y 展开后===> x=(强转类型)(x+y) 因为有强转所以不会产生报错,但可能会出现丢失精度    ;       x=x+y   X+Y的值如果超出X的值的类型范围,会报错
作者: 双元王志超    时间: 2015-7-6 21:50
下边的式子需要加个强转,不然会报错。前面的默认强转。
作者: 赵文斌    时间: 2015-7-6 21:53
x+=y这个表达式具有强转的效果,使得x+y最后得到的结果都强转为x 的类型
作者: 赵文斌    时间: 2015-7-6 21:57
x=x+y  这个表达式对数据类型的不会类型转换,例如当x为byte的时候,y为int时,相加之后不会自动转为byte型
作者: 半山岩    时间: 2015-7-6 22:01
x+=y、x=x+y效果一样,但是x+=y隐含有类型强转的作用,
作者: Chasel    时间: 2015-7-6 22:06
好好看视频学习!
作者: 搁浅丶那份    时间: 2015-7-6 22:12
前边强转,后边不强转,后面有可能编译错误
作者: lsunshine    时间: 2015-7-6 22:21
举个例子来说吧   short  x =1;  int  y=6;  x+=y; //x=(short)(x+y);   而x=x+y就会损失精度.
作者: lsunshine    时间: 2015-7-6 22:23
举个例子来说吧   short  x =1;  int  y=6;  x+=y; //x=(short)(x+y);   而x=x+y就会损失精度.
作者: lsunshine    时间: 2015-7-6 22:25
举个例子来说吧   short  x =1;  int  y=6;  x+=y; //x=(short)(x+y);   而x=x+y就会报损失精度.
作者: 如初见    时间: 2015-7-6 22:28
里面有数据类型转换问题
作者: 1115302782    时间: 2015-7-6 22:32
没什么区别效果是一样的,+=是一个复合运算符
作者: 夜写意    时间: 2015-7-6 22:43
x += y 在一般情况下等价于 x = x + y
但是在一些特殊情况下就有区别
比如:
byte x = 1;
byte y = 2;
此时,x+y所得的结果是int类型的。这是因为 char、short、byte类型在进行运算的时候会自动进行类型提升,提升为int类型。此时,x=x+y就会报错。
同理:
int x = 1;
long y = 2;
在x+y运算时,x会自动提升为long类型,也会报错。

然而 x+=y的情况就不会报错,因为+=是根据运算得的结果来判断其是否超过其赋值对象的范围。如果超过了同样报错。
作者: GMQQ    时间: 2015-7-6 22:45
前面的可以前置转型后面可能发生错误




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