gpt4 book ai didi

java - 比较 Scala 和 Java Double.NaN

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:41 25 4
gpt4 key购买 nike

为什么这个比较结果为 true

scala> Double.NaN equals java.lang.Double.NaN
res5: Boolean = true

但是这个计算结果为 false

scala> Double.NaN == java.lang.Double.NaN
res6: Boolean = false

旁白:this 有趣的 Twitter 线程促使我问这个问题

最佳答案

这不是关于 Scala 的 NaN 与 Java 的对比——只有一个 NaN:

scala> val a = Double.NaN
a: Double = NaN

scala> val b = java.lang.Double.NaN
b: Double = NaN

也不是关于有两个具有相同值的对象。关于 the definition of NaN .两个 NaN 不是 ==,因为那是 NaN 的定义方式——它不是数字,而是一个表示“未定义”的特殊值。如果你有其中两个,你怎么知道它们是否相等?例如:

scala> val x = 0.0 / 0.0
x: Double = NaN

scala> val y = Math.sqrt(-1)
y: Double = NaN

scala> x == y
res9: Boolean = false

幸运的是他们不是==;它们不是您可以比较其值的数字。

至于x.equals(y),嗯,你为什么要在 Scala 中这样做?但是鉴于你这样做了,你会遇到 I.K. 的 Java 怪异之处。向我们指出 the docs为了。让我们来演示一下:

public class Foo {
public static void main( String[] args ) {
double nan1 = 0.0 / 0.0; Double box1 = nan1;
double nan2 = Math.sqrt(-1); Double box2 = nan2;
System.out.println( nan1 == nan2 ); // false, as expected
System.out.println( box1.equals(box2) ); // true -- WTF???
}
}

关于java - 比较 Scala 和 Java Double.NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com