我想知道做这两个操作时是否存在复杂性和时差:
1)
int sum = 0;
for (int i = 0; i < 1000000; i++) {
sum = sum + i;
}
2)
int sum = 0;
for (int i = 0; i < 1000000; i++) {
sum += i;
}
或者将问题想象成更大的数字/数据,这只是一个例子。
答案 0 :(得分:1)
优先级有所不同,复合分配sum += i
的优先级低于分配和附加sum = i + 1
。
递增i++
更为重要。
有关更多信息:operator precedence
答案 1 :(得分:1)
从性能的角度来看,这些变体是相同的(两者都将作为Java字节码中的 iadd 指令)
但是sum += 1
替换为sum = (int) (sum + 1)
对于byte
或short
这样的类型,它具有不同的编译方式
例如。该代码将被编译
byte i = 0;
for(int j = 0; j < 10; j++) {
i += j; //i = (byte) (i + j)
}
但是您会收到代码的编译错误
byte i = 0;
for(int j = 0; j < 10; j++) {
i = i + j;
}