gpt4 book ai didi

scala - Array.empty == Array() 给出 false 但两者在类型和值方面看起来相同?

转载 作者:行者123 更新时间:2023-12-01 16:27:51 24 4
gpt4 key购买 nike

在检查代码更改时,我发现 Array.empty不是Array()我认为更惯用。然后我惊讶地发现==他们给出false但它们在类型和值方面看起来是相同的。

scala> Array.empty == Array()
res1: Boolean = false

scala> Array.empty
res2: Array[Nothing] = Array()

scala> Array()
res3: Array[Nothing] = Array()

谁能解释一下为什么会这样吗?

最佳答案

这实际上更像是一个 Java 问题。因为在 Java 中(Scala 的Array 正是使用的),数组相等就是身份相等

// scala                   compiles as such Java           is equal to
Array.empty == Array() === Array.empty.equals(Array()) === false

根据结构检查数组相等性的正确方法是:

java.util.Arrays.equals(Array.empty, Array()) === true

数组是 JVM 上非常特殊的野兽 - 直觉常常会失败。Scala 必须继承这个定义,以保持与 Java 内容的兼容性。

关于scala - Array.empty == Array() 给出 false 但两者在类型和值方面看起来相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879014/

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