2010-07-09 69 views
9
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预发布。

+1

注意:您可以使用[scala] [array] – oluies 2010-07-09 18:44:51

+0

搜索所有与scala相关的数组问题[为什么要使用Array [0,1,2] == Array(0,1,2)不返回预期的结果?](http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1-2-not-return-the-expected-result) – Suma 2015-01-21 19:53:04

回答

17

因为数组的“等于”定义是指它们指向相同的数组。

这与Java的数组相等一致,使用Object.Equals,因此它比较了引用。

如果你想检查成对的元素,然后使用sameElements

Array('a','b').sameElements(Array('a','b')) 

deepEquals,已在2.8被弃用,因此改用:

Array('a','b').deep.equals(Array('a','b').deep) 

有上array equality一个很好的Nabble讨论。

+2

是数组只有比较内置集合的实际元素的一般规则才是例外情况?我试过的所有其他集合都比较了这些元素。 – 2010-07-09 17:03:12

+2

@olle - 就我所知,它是唯一展示此行为的集合。即使'ArrayList'比较元素。我无法弄清楚的是,这应该从文档中学到:) – Stephen 2010-07-09 18:10:59

+3

也参见http://stackoverflow.com/questions/2481149/why-does-array0-1-2-array0-1- 2-not-return-the-expected-results – oluies 2010-07-09 18:44:14