邏輯上,if(!foo)
和if(foo == false)
是等效的。它們在Java中如何表示?編譯後兩者之間是否有區別,無論是字節碼還是性能?我無法在JLS中找到答案,並且搜索提出了大量= = == typos和==/equals()行爲的結果。 (在這種情況下,符號阻礙了我的搜索;對於未來的搜索者,否定運算符等於假,等於假,而不是條件)。Java中if(!foo)和if(foo == false)之間的性能差異(如果有的話)是什麼?
爲了避免CW爭論:這個問題不是問人們更喜歡哪種變體,哪種變體更好。我對語言實施的差異感興趣,所以有一個正確的答案。相關 - 但並非相當-一個重複數據刪除:Difference between while (x = false) and while (!x) in Java?
編輯:
普遍的共識似乎是一個很好的編譯器應該優化這些相同的事情。這是有道理的,也是我所懷疑的,但是 - 要求更多的學術問題 - 是否實際上在任何地方實施了行爲,還是僅僅是「合理的事情」?
請記住這是編譯器特定的。 – danben 2010-01-11 17:09:12
這裏有兩個問題。第一個問題是如何用Java表示的(字節碼)。第二個問是否在性能和字節碼方面存在差異(我認爲size是這裏的關注因素)。 – 2010-01-11 17:09:52
任何不能識別這種優化的編譯器都不會使它在市場上走得太遠;) – 2010-01-11 17:10:26