2

我刚刚开始思考.equals()vs ==、Java 的 pass-by-copy 与 pass-by-reference 等。我想知道在 Java 中是否会有这样的场景可以无限运行:

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

我对 String 对象、Array 对象等有一些想法,但无法完全发挥作用。谢谢。

4

1 回答 1

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

我相信这就是书中的“弯针新娘”谜题。Java Puzzlers

请参阅JLS以供参考:

浮点相等性测试根据 IEEE 754 标准的规则执行:

如果任一操作数为 NaN,则 == 的结果为假,但 != 的结果为真。事实上,当且仅当 x 的值为 NaN 时,测试 x!=x 为真。(方法 Float.isNaN 和 Double.isNaN 也可用于测试值是否为 NaN。)

于 2013-04-30T18:11:35.493 回答