首页 新闻 赞助 找找看

a += 5 与 a = a + 5 有什么不同?

1
[待解决问题]

定义有byte a = 5;

然后

a += 5;是正确的

a = a + 5;是错误的

这底层到底是一个怎样的转换机制。。。

laizhd的主页 laizhd | 初学一级 | 园豆:100
提问于:2011-08-18 16:30
< >
分享
所有回答(6)
0

在a=a+5;中,a+5运算的结果是int型,把它赋值给一个byte型变量a,所以会报错;

而在a+=5;中,由于是a是byte类型的,所以编译器会先把5强制转换为byte型,然后再参与运算,所以其结果也是byte类型的,因此不会报错;

BrightSea | 园豆:220 (菜鸟二级) | 2011-08-18 16:50
第一点是对的,但第二点还是有问题.因为就算是两个byte型的变量参与运算也会出现问题,比如说a = a + a; a + a 返回的也是int型
支持(0) 反对(0) laizhd | 园豆:100 (初学一级) | 2011-08-19 10:26
0

你第二句a=a+5,那个5是int类型,两个类型不同不能相加。

顾晓北 | 园豆:10844 (专家六级) | 2011-08-18 17:32
0

.NET也是这样

a += 5;是正确的

a = a + 5;是错误的

@version | 园豆:211 (菜鸟二级) | 2011-08-19 07:06
汗 我用了那么久的C#竟然不知道,呜~
支持(0) 反对(0) laizhd | 园豆:100 (初学一级) | 2011-08-19 10:23
0

2楼正解。 而且其实就效率来说, 第一种会更高。

 

a+=5; 是直接将5加到a所在的内存单元里。

a =a + 5; 会先复制一个空间用以储存a的副本, 然后将5加到上面, 最后再把a+5赋值给a.

当然, 现在的编译器应该会在这方面做些优化~~~俺是菜鸟。。

真不是Geek | 园豆:205 (菜鸟二级) | 2011-08-19 10:15
其实二楼的说法是错误的,并不是说类型不同就不能相加,比如:
byte a ;
byte b = 2;
a = b + b; //这行代码会编译错误,因为b + b 返回一个int型赋给了a
a += b; //这行代码就没问题了
以上都是经过实验考证的
支持(0) 反对(0) laizhd | 园豆:100 (初学一级) | 2011-08-19 10:22
也就是说加的时候 byte会自动转换成int型相加?
支持(0) 反对(0) 真不是Geek | 园豆:205 (菜鸟二级) | 2011-08-21 11:15
0

+= 、-= 、×= 、 /= 和 = 一样都是赋值运算符,使用赋值运算符不仅有更好的性能,还能使程序更健壮。教科书上这么解释的,我觉得再深入下去会比较耗时间。

蜀山客 | 园豆:191 (初学一级) | 2011-10-31 15:17

如果是C语言的教科书,那是对的。

如果是C#的教科书,就是错的

 

支持(0) 反对(0) 碧落星痕 | 园豆:708 (小虾三级) | 2011-11-30 15:58

@碧落星痕: 这是在讨论java吧?

支持(0) 反对(0) 蜀山客 | 园豆:191 (初学一级) | 2011-11-30 15:59
0

把a的类型改为int不就可以了

明明小k | 园豆:246 (菜鸟二级) | 2013-05-09 07:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册