A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ruby 中级黑马   /  2015-7-6 20:24  /  1071 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

x+=y;
x=x+y;有什么区别

20 个回复

倒序浏览
没啥区别好像效果一样
回复 使用道具 举报
前者默认强转 后者不强转
回复 使用道具 举报
现在看是没什么区别 但是有的时候进行赋值的时候x+=y隐藏一个强转.而内个就没有啦 !!!
回复 使用道具 举报
我感觉没啥区别,要用具体数据来说,变量的话应该差不多
回复 使用道具 举报
如果不涉及数据类型转换的话真是没区别~~
回复 使用道具 举报
这两个表达式都被称为赋值表达式。
复合赋值 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 数值的高两位给截掉了




回复 使用道具 举报
x+=y 展开后===> x=(强转类型)(x+y) 因为有强转所以不会产生报错,但可能会出现丢失精度    ;       x=x+y   X+Y的值如果超出X的值的类型范围,会报错
回复 使用道具 举报
下边的式子需要加个强转,不然会报错。前面的默认强转。
回复 使用道具 举报
x+=y这个表达式具有强转的效果,使得x+y最后得到的结果都强转为x 的类型
回复 使用道具 举报
x=x+y  这个表达式对数据类型的不会类型转换,例如当x为byte的时候,y为int时,相加之后不会自动转为byte型
回复 使用道具 举报
x+=y、x=x+y效果一样,但是x+=y隐含有类型强转的作用,
回复 使用道具 举报
好好看视频学习!
回复 使用道具 举报
前边强转,后边不强转,后面有可能编译错误
回复 使用道具 举报
举个例子来说吧   short  x =1;  int  y=6;  x+=y; //x=(short)(x+y);   而x=x+y就会损失精度.
回复 使用道具 举报
举个例子来说吧   short  x =1;  int  y=6;  x+=y; //x=(short)(x+y);   而x=x+y就会损失精度.
回复 使用道具 举报
举个例子来说吧   short  x =1;  int  y=6;  x+=y; //x=(short)(x+y);   而x=x+y就会报损失精度.
回复 使用道具 举报
里面有数据类型转换问题
回复 使用道具 举报
1115302782 来自手机 中级黑马 2015-7-6 22:32:51
19#
没什么区别效果是一样的,+=是一个复合运算符
回复 使用道具 举报
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的情况就不会报错,因为+=是根据运算得的结果来判断其是否超过其赋值对象的范围。如果超过了同样报错。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马