4
A
回答
13
甲性能問題纔有意義在上下文其中功能行爲是相同的(因爲,如果功能性是不同的,一個正確的行爲優於一個微小更快的一個),所以我假設你指的是不使用表達式的值的情況?也就是說,表達式的唯一目的是增加i
?在這種情況下,答案是否定的:沒有性能差異,事實上,沒有任何區別。我剛剛編譯了這個類:
public class Foo
{
public static void main(final String args[])
{
int i = Integer.parseInt(args[0]);
i++;
}
}
並計算得到的Foo.class
的MD5校驗和;並且類似地用++i
代替。他們有相同的校驗,表明這兩個版本被編譯成確切相同的字節,因此將執行字面上相同。
(當然,這在理論上可以,取決於編譯器。不同的編譯器可能會決定甚至在上下文,他們是相當於編譯i++
不同於++i
,但我懷疑,這是真的不值得擔憂的,即使它的情況。)
1
的增量所需的運行本身應該是相同的,但如果您使用的是前或後增量明顯可能對周圍的代碼對性能的影響並且在更多情況下可以優化後增量。
也有一些不明顯的情況下,如果周圍的代碼的性能變化。至少當與Oracle在x86或x64硬件服務器虛擬機上運行,下面的循環在其運行時顯著差異:
long a=0, b=0;
for(int i=0;i<1000000;i++) {
b = 3;
a += i * (b++);
}
...
long a=0, b=0;
for(int i=0;i<1000000;i++) {
b = 3;
a += i * (++b);
}
相關問題
- 1. 後增量和增量前置運算符
- 2. 使用增量前或增量後運算符的情況
- 3. 前增量和後增量
- 4. 增量,增量前和增量後
- 5. 後增量運算符++
- 6. 後增量運算
- 7. 後增量,預增量和運算符優先
- 8. 增量運算符
- 9. 運算符「==」和「=」之間的差異運算符「==」和「=」之間的差異「==」和「=」
- 10. 性能差異與鑄造增加一倍和增量
- 11. 後增量和前增量和Rvals
- 12. C#後綴和前綴增量/減量過載差異
- 13. gcc優化前增量和後增量
- 14. Java:增量/減量運算符的前綴/後綴?
- 15. 增量運算符的原子性
- 16. 後增量運算符的行爲
- 17. 後增量運算用C
- 18. C增量運算符
- 19. 增量運算符java
- 20. Java後綴增量運算符行爲
- 21. 重載後綴增量運算符
- 22. 後綴增量運算符評估
- 23. 預增量和增量後
- 24. Java的增量和賦值運算符
- 25. 在MySQL和IN運算符之間有任何性能差異
- 26. 迭代器和增量運算符
- 27. 神交前和後增量
- 28. Javascript:比較運算符在postfix增量運算符之前如何評估?
- 29. 預增量,在MSDOS和DEVC++編譯器後增量結果差異
- 30. ostream運算符在重載的後綴增量/減量運算符上重載
據我所知,沒有差異,表現方向 – 2012-03-19 16:52:15
運行測試並找出? – cdeszaq 2012-03-19 16:52:41
[非常基本的代碼性能]的可能的重複(http://stackoverflow.com/questions/4110764/very-basic-code-performance) – assylias 2012-03-19 16:57:22