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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 橸瑩膤漃寞林 中级黑马   /  2014-3-9 14:42  /  1491 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 橸瑩膤漃寞林 于 2014-3-9 18:22 编辑

sum += arr[x];这里的+=是什么意思?谁能帮我解释下这句话吗?

9 个回复

正序浏览
意思就是把左右两边值的和赋给左边,sum+=arr[x]只是一次运算,而sum=sum+arr[x] 是两次运算
回复 使用道具 举报
如  :  sum是 int型   而arr[]是double类型的数组  那么 arr[x]+sum 的结果会自动提升为double类型的数
          而  sum还是int的   
          所以   double类型是不能 赋值给int类型的参数的
回复 使用道具 举报
注意  :    是把左右两边的和赋值给左边   是一次运算
                而        sum =sum+ arr[x];      是2次运算sum+arr[x]一次   ,
                然后把  和赋值给左边
                如果右边有2种常数    如: int  和   double    就容易出错
回复 使用道具 举报
“+=”的是sun=sun+arr[i];的简称。意思就是左右相加赋值给变量
回复 使用道具 举报
楼上给出的答案非常全面!!
sum+=arr[x]只是一次运算,两者相加的和再赋值给sum,其中有一个自动转换其数据类型的过程
回复 使用道具 举报
本帖最后由 tacyjay在路上 于 2014-3-9 16:15 编辑

sum+=arr[x];
即是相当于sum=sum+arr[x];
相当于把两边的值加起来,赋予给左边的sum;


值得注意的是,

sum+=arr[x]只是一次运算,而sum=sum+arr[x] 是两次运算,先相加,再赋值给左边。
因此要注意 数据类型提升的问题。

下面是例子:
  1. class  Demo
  2. {
  3.         public static void main(String[] args)
  4.         {               
  5.                 int m=1;
  6.                 char x='a',y='a',z='a';
  7.                 x=x+m;  //因为x、y占2个byte,m占4个byte,把相加为4byte的int类型赋给只有2个byte的char,此处编译不通过,提示会损失精度。
  8.                 y+=m;   //+=会自动转换数据类型,与左边保持一致,即强制转换为char类型。执行结果为 y=b。
  9.                 m=z+m;//左边为int类型,所以编译可以通过,执行结果为m=98。
  10.                 System.out.println("x="+x);
  11.                 System.out.println("y="+y);
  12.                 System.out.println("m="+m);
  13.         }
  14. }
复制代码
注:上例编译时,应该在07行代码前用//注释掉。


回复 使用道具 举报
我觉得这样记比较简单 : 左右相加,然后再赋值给左边。
就是这个意思。:D
回复 使用道具 举报
sum += arr[x];跟sum=sum+arr[x]; 一个意思,这样是简写。
回复 使用道具 举报
a+=b就是a=a+b的意思,还有-+,*=等等什么的都是一个意思。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马