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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不破大地 中级黑马   /  2013-6-17 18:21  /  1385 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

回顾了之前学的内容,发现有个小疑问: 在实现x和y相加的时候,x+=y和x=x+y两种方式有啥区别哈
还望各位师兄师姐见教。。

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
x+=y是一次运算,因为只是用了一个运算符,对于类型不同时,会自动完成提升和转型。
x=x+y是两次运算,包括一次求和和一次赋值。所以当类型不同时候,对于求和,类型会自动向上提升,而赋值则需要自己手动强转。

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 很给力!

查看全部评分

回复 使用道具 举报
结果没区别啊
“+=”先执行加法运算,再进行赋值
x+=y等效于x=x+y

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在一般情况下,x+=y与x=x+y的作用是等价的。
   但在有些情况下却并不是这样:
   如下代码:
   short s=3;
   s+=1;//编译通过
   s=s+1;//编译错误
  s=s+1编译错误时因为左边s+1的运算结果为int类型,而等号右边变量为short类型。类型不匹配而造成编译错误。
  s+=1编译正确是因为“+=”运算符在Java环境中会自动根据接收变量类型进行类型的强制转换。
  通过上述示例可以知道:x+=y等价于x=x+y和类型强制转换两个操作。

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 赞一个!

查看全部评分

回复 使用道具 举报
引用磊磊同学的一点:x=x+y是两次运算,包括一次求和和一次赋值,x+=y是一次运算。
前者:存在自动提升运算的类型
后者是java语言规定的运算符:具体看例子eg:
  1. short num=1;
  2.                 num=num+1;
  3.                 //由于num+1运算时会自动提升表达式的类型, 所以结果是int型,再赋值给short类型num时,编译器将报告需要强制转换类型的错误
  4.                 short num1=2;
  5.                 num1+=2;
  6.                 //由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理
复制代码

评分

参与人数 1技术分 +1 收起 理由
尹丽峰 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
x+=y是一次运算,如果x和y是不同的类型时,会有类型提升和。
例子: int x=2; long y=7;运算后x会自动提升为long类型的;

x=x+y是两次运算,如果x和y是不同的类型时,加法运算时会有类型自动提升,但是第二部的赋值操作需要强制转换。
例子; int x=2; long y=7;  首先这条语句会报错,因为 右边运算后结果为long类型的,左边x为int型的 所以赋值操作时会报错,需改为 x=(int)(x+y)。

评分

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

查看全部评分

回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马