黑马程序员技术交流社区

标题: sum += arr[x]; [打印本页]

作者: 橸瑩膤漃寞林    时间: 2014-3-9 14:42
标题: sum += arr[x];
本帖最后由 橸瑩膤漃寞林 于 2014-3-9 18:22 编辑

sum += arr[x];这里的+=是什么意思?谁能帮我解释下这句话吗?
作者: volvoxc    时间: 2014-3-9 14:45
a+=b就是a=a+b的意思,还有-+,*=等等什么的都是一个意思。
作者: 黑马晓志    时间: 2014-3-9 14:54
sum += arr[x];跟sum=sum+arr[x]; 一个意思,这样是简写。
作者: 何建明    时间: 2014-3-9 15:27
我觉得这样记比较简单 : 左右相加,然后再赋值给左边。
就是这个意思。:D
作者: tacyjay在路上    时间: 2014-3-9 15:42
本帖最后由 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行代码前用//注释掉。



作者: のソ夏末    时间: 2014-3-9 15:50
楼上给出的答案非常全面!!
sum+=arr[x]只是一次运算,两者相加的和再赋值给sum,其中有一个自动转换其数据类型的过程
作者: pifuhanshu    时间: 2014-3-9 18:22
“+=”的是sun=sun+arr[i];的简称。意思就是左右相加赋值给变量
作者: 2528870651    时间: 2014-3-9 22:42
注意  :    是把左右两边的和赋值给左边   是一次运算
                而        sum =sum+ arr[x];      是2次运算sum+arr[x]一次   ,
                然后把  和赋值给左边
                如果右边有2种常数    如: int  和   double    就容易出错

作者: 2528870651    时间: 2014-3-9 22:46
如  :  sum是 int型   而arr[]是double类型的数组  那么 arr[x]+sum 的结果会自动提升为double类型的数
          而  sum还是int的   
          所以   double类型是不能 赋值给int类型的参数的
作者: 蓝枫    时间: 2014-3-9 23:00
意思就是把左右两边值的和赋给左边,sum+=arr[x]只是一次运算,而sum=sum+arr[x] 是两次运算




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2