黑马程序员技术交流社区
标题:
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