【问题标题】:Are there any scenarios in which (i != i) will be evaluated to true?是否有任何情况下 (i != i) 将被评估为真?
【发布时间】:2013-04-24 18:03:19
【问题描述】:

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

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

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

【问题讨论】:

  • i 是浮点NaN 值时。
  • 只有pass by value..java中没有pass by copypass by reference
  • @TomHatwin 试试看。 NaN != NaN 为真。
  • @DMoses 语言错误。他问的是 Java,而不是 CSharp。

标签: java


【解决方案1】:
while (Double.NaN != Double.NaN)

我相信这是Java Puzzlers 书中的“bride of looper”谜题。

参考JLS

浮点相等性测试是按照 IEEE 754 标准的规则进行的:

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

【讨论】:

  • 啊,这很有趣。另一个模糊标准规范的花絮要添加到我的大脑:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多