2013-04-30 59 views
2

我剛剛開始圍繞.equals()==,Java的pass-by-copy和pass-by-reference等方面進行了討論。我想知道是否會有Java中的場景可以無限運行:是否有任何情景(i!= i)會被評估爲真?

while (i != i) { 
    // infinite loop 
} 

我對String對象,數組對象等有一些想法,但不能完全得到任何工作。謝謝。

+6

當'i'是浮點型'NaN'值時。 – 2013-04-30 18:11:26

+0

它只是'通過值'...在java中沒有被'通過拷貝'或'通過引用傳遞' – Anirudha 2013-04-30 18:12:44

+0

請參閱http://stackoverflow.com/questions/4933769/c-sharp-nan-comparison-differences -between-equals-和 – 2013-04-30 18:13:55

回答

7
while (Double.NaN != Double.NaN) 

我相信這是在Java Puzzlers書 「bride of looper」 之謎。

參考文獻見JLS

如果操作數是NaN,則==的結果爲:

浮點平等測試是在根據IEEE 754標準的規則來執行假,但是!=的結果爲 。事實上,當且僅當x的值爲NaN時,測試x!= x才爲真。 (方法Float.isNaN和Double.isNaN也可用 來測試一個值是否爲NaN。)

+0

啊,這很有趣。另一個晦澀難懂的標準規範要加入我的腦子:) – 2013-04-30 18:32:19

相關問題