在审核代码更改时,我发现Array.empty
而不是Array()
我认为更加惯用。然后我惊讶地发现==
他们给出了false
但它们看起来是相同的类型和价值。
scala> Array.empty == Array()
res1: Boolean = false
scala> Array.empty
res2: Array[Nothing] = Array()
scala> Array()
res3: Array[Nothing] = Array()
有人可以解释为什么会这样吗?
答案 0 :(得分:5)
这实际上更像是一个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的兼容性。