黑马程序员技术交流社区

标题: sum += i;与sum = sum +i;有什么不同? [打印本页]

作者: 陈汉维    时间: 2012-7-26 13:47
标题: sum += i;与sum = sum +i;有什么不同?
class Sum
{
public static void main(String[] args)
{
  int sum = 0;
  for(int i = 1; i <= 100; i++)
  {
   //sum += i;
   sum = sum +i;
  }
  System.out.println("sum =" + sum);
}
}
请问sum += i;和sum = sum + i;运算出来的结果都一样?有没有什么不同的地方?用哪个更好一点。
作者: 陈汉维    时间: 2012-7-26 13:49
还有for(int i = 1; i <= 100; i++)是写i <= 100规范还是写i < 101规范?请各位大能帮忙解释下,谢谢
作者: 马州州    时间: 2012-7-26 13:58
请问sum += i;和sum = sum + i;运算出来的结果都一样?有没有什么不同的地方?用哪个更好一点。

sum+=i,和sum=sum+i算代表的意思是一样的,其实也就是sum+=i  等于sum+i
两者都是把sum+i的值赋给sum
只是一个是用运算符来表示的,一个是数学式子
一般都是应用于累加
至于用哪个好一点,我觉得都一样,你觉得哪个看起来更好理解就用哪个


作者: 郑正华    时间: 2012-7-26 13:58
本帖最后由 郑正华 于 2012-7-26 14:51 编辑

在sum是int、long、float、double类型的情况下。sum += i;和sum = sum + i;运行的结果都一样的,都是同一个意思。sum+=i就是sum = sum + i的另一种简写方式,相应的加减乘除都有。
比如除法:sum %= i;和sum = sum % i;
但如果sum是short、byte、char类型的话,那就有区别了,因为这里有个向上转型和向下转型的说法:
sum=sum+i          编译失败,与i相加时sum会被提升为int类型,运算后的结果还是int类型。无法赋值给short、char、byte类型。因为int类型不能向下转型。
sum+=i                编译通过,因为+=运算符具有自动强转功能。相当于多做了这样一件事情,假如sum现在是short类型:sum = (short)(sum+i)

对于for(int i = 1; i <= 100; i++)   写成i<=100或者i<101都是一样的意思,都很规范,不存在谁不规范的问题!如果非要写成其中的一种,那估计跟程序的需求有关系了!
作者: 范泰洋    时间: 2012-7-26 14:00

例如 sum的类型是short  i的类型是int

short sum = 3 ;
int i = 1;

sum = sum + i 那么就会编译失败。损失精度。没有数据类型转换的过过程。
sum +=i ; 编译通过,因为+=是赋值运算。会有一个自动转换的动作。

根据需求而用。

还有for(int i = 1; i <= 100; i++)是写i <= 100规范还是写i < 101规范
两种写法都可以。
作者: 周玉龙    时间: 2012-7-26 14:06
他们还是有点区别的:当在以下情况时,他们就不同了。

short s = 5;

s=s+2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。
s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。
希望对你有帮助。

作者: 吴立杰    时间: 2012-7-26 14:39
意思一样!用sum+=i好; 因为如果你的数据类型是非int类型的时候,例如:short类型的,如果你用sum=sum+i;会报错的;而sum+=i;不会,因为它内部存在自动向上转型的过程,即相当于我把short已经转成int了就不需要在强转成short类型的了。
作者: 高正新    时间: 2012-7-26 15:37
sum += i;与sum = sum +i;
参照毕老师的视频,sum+=i中+=是一个赋值运算符,是一个符号,作用是将左右两边的和赋给左边。
sum=sum+i,则是单层次的把sum和i的值进行相加,再把结果赋给sum,是两部运算。
作者: 罗宵    时间: 2012-7-26 18:16
//sum += i;
    sum = sum +i;
这两个主要是涉及到数据类型的转换。一般整数的默认类型是int,数据转换是自动像上转换的,
即byte——>short——>int——>long——>flaot——>double.
sum += i;式子里面有个自动转换。当sum和i是同类型,且和不超过该类型范围,这两个式子是一样的。
如果不是同类型就只能用第一个了。
比如:byte sum=5;   int i=6
sum+=i,本来是byte+int=int,但式子有个强转即byte+int=(byte)int,这个是可以的,但是可能有损精度。
sum=sum+i;就是byte=byte+int,这个就是错误的。

for(int i = 1; i <= 100; i++)   写成i<=100或者i<101都是一个的意思,都是一个取值范围
作者: 陈汉维    时间: 2012-7-26 21:00
非常感谢各位,终于明白了。




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