有什么区别?在更大的循环中这有关系吗?

时间:2019-01-31 08:57:53

标签: java performance time

我想知道做这两个操作时是否存在复杂性和时差:

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;
}

或者将问题想象成更大的数字/数据,这只是一个例子。

2 个答案:

答案 0 :(得分:1)

优先级有所不同,复合分配sum += i的优先级低于分配和附加sum = i + 1。 递增i++更为重要。

有关更多信息:operator precedence

答案 1 :(得分:1)

从性能的角度来看,这些变体是相同的(两者都将作为Java字节码中的 iadd 指令)

但是sum += 1替换为sum = (int) (sum + 1) 对于byteshort这样的类型,它具有不同的编译方式 例如。该代码将被编译

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;
}