在审查代码更改时,我发现Array.empty并不是Array()说我会考虑更多的惯用语.然后我惊讶地发现==他们给出false了他们看起来相同的类型和价值方面.
scala> Array.empty == Array()
res1: Boolean = false
scala> Array.empty
res2: Array[Nothing] = Array()
scala> Array()
res3: Array[Nothing] = Array()
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么会这样?
这实际上更像是一个Java问题.因为在Java中,Scala Array正在使用它,所以数组相等是身份相等.
// scala compiles as such Java is equal to
Array.empty == Array() === Array.empty.equals(Array()) === false
Run Code Online (Sandbox Code Playgroud)
根据结构检查数组相等性的正确方法是:
java.util.Arrays.equals(Array.empty, Array()) === true
Run Code Online (Sandbox Code Playgroud)
数组是JVM上非常特殊的野兽 - 直觉通常会失败.Scala必须继承这个定义,以保持与Java的兼容性.
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |