2010-07-09 64 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