scala> List(1,2,3) == List(1,2,3)
res2: Boolean = true
scala> Map(1 -> "Olle") == Map(1 -> "Olle")
res3: Boolean = true
但是当尝试对Array执行相同操作时,它的工作方式不同。为什么呢?
scala> Array('a','b') == Array('a','b')
res4: Boolean = false
我使用过2.8.0.RC7和2.8.0.Beta1-prerelease。
答案 0 :(得分:19)
因为Arrays的“等于”的定义是它们引用相同的数组。
这与使用Object.Equals
的Java数组相等一致,因此它会比较引用。
如果要检查成对元素,请使用sameElements
Array('a','b').sameElements(Array('a','b'))
或deepEquals
,已在2.8中弃用,因此改为使用:
Array('a','b').deep.equals(Array('a','b').deep)
在array equality上有一个很好的Nabble讨论。
答案 1 :(得分:0)
根本原因是 Scala 使用与 Java 相同的Array实现,这是唯一不支持==
作为相等的集合操作
此外,重要的是要注意所选答案同样建议sameElements
和deep
进行比较,实际上最好使用它:
Array('a','b').deep.equals(Array('a','b').deep)
或者,因为现在我们可以再次使用==
:
Array('a','b').deep == Array('a','b').deep
而不是:
Array('a','b').sameElements(Array('a','b'))
因为sameElements
不适用于嵌套数组,所以它不是递归的。并deep
进行比较。