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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 石欣欣 黑马帝   /  2011-8-29 22:48  /  11463 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

sum=sum+1和sum+=1有什么区别  写代码时用个?
详细说明

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
黑马网友  发表于 2011-8-30 09:32:12
沙发
没有区别,2句话表达的意思就是sum每次给自己加上一个1 越来越大
回复 使用道具 举报
黑马网友  发表于 2011-8-30 15:59:59
藤椅
很大区别,如果sum的类型是byte,或者字节小于int类型的话,前者编译不通过,后者可以
回复 使用道具 举报
黑马网友  发表于 2011-9-1 09:31:03
板凳

回复 藤椅 的帖子

哦,受教了
回复 使用道具 举报
黑马网友  发表于 2011-9-1 20:51:48
报纸
两个语句是一样的,SUM+=1就是SUM=SUM+1的简写,他们表达的意思是一样的。
代码+=,-=,*=之类的意义都是自加,自减,自乘,自己给自己运算。
回复 使用道具 举报
黑马网友  发表于 2011-9-7 14:50:05
地板

回复 楼主 的帖子

两个语句在是否相同,取决于Sum的数据类型,比如,如果sum 的数据类型为 int , sum =sum +1 与sum+=1相同。如果sum的数据类型为short时,sum=sum+1 编译无法通过,而sum+=1编译可以通过,原因是:
在sum=sum+1 这个表达式中,右边的sum运算过程中,将会由short转换为int类型,相加后的结果为int类型,所以,Java中无法将一int类型的数赋值给Short.
在sum+=1表达式中 因为+=运算符在给s赋值时,会自动完成强制转化工作,所以编译通过。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 新人报到.

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-7 15:47:45
7#
支持郭敏的解释,其实就可以理解为:sum+=1就是一个赋值操作(把左右两边的运算结果赋给sum);而sum =sum +1是两步操作,先要进行加法运算,再赋值.同时我们要注意在运算中类型转换的特点就跟大小容器间的兼容一样,小容器与大容器运算,会自动完成强制转化为大容量的单位,而大容量的单位如果要强制转化为小单位,就有可能装不下,所以编译会出错.具体类型转化的方式和注意点可看毕老师的视频:传智播客毕向东Java基础视频教程-day02中的相关知识点学习.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-8 07:32:24
8#
楼上皆答非所问!为什么这么说呢?听着!
当我们看待sum=sum+1和sum+=1两个表达式的区别时,其中已经隐藏了一个前提条件,即变量的类型是确定的,所以无须从变量类型不同的角度来考察它们的区别。你想啊,如果在变量类型不确定的情况下,就贸然写一个表达式,然后再根据变量类型反过来判断表达式能否计算,如此折腾,那也太傻了吧!
那么sum=sum+1和sum+=1两个表达式的区别到底在那呢?万物皆有别,关键是别之大小,所以无论是其计算顺序还是字符个数的差别都不值一提。它们最重要的差别反映在编译阶段,根据编辑器自顶向下分析表达式的方法,第一个表达式将被转换成第二个表达式,也就是说,如果直接写第二个表达式,将提高编译效率。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-8 08:12:35
9#
楼上童鞋虽然有点啰嗦,但回答的方式很有个性,顶一个:victory:
回复 使用道具 举报
黑马网友  发表于 2011-9-8 11:29:56
10#
8楼的回答到重点上了,这应该是楼主想要的吧。主要是提高编译效率,当然,关于变量类型的问题,也得好好考虑。学到了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马