比较Seq和Array的不同行为

时间:2019-07-19 09:04:14

标签: scala equality scala-collections

Scala似乎查看的Seq与单个对象的值相同,但与Array的视图不同。

Seq的行为与ListSet相同。

scala> Array(1) == Array(1)
res2: Boolean = false

scala> Seq(1) == Seq(1)
res3: Boolean = true

为什么会发生?到底是什么原因?

1 个答案:

答案 0 :(得分:5)

这是因为Array本质上是Java数组的别名,该数组将equals实现为引用相等-仅当两个变量指向同一数组实例时才返回true。

数组是==为其检查引用相等性的唯一Scala集合,对于它委托给.equals的所有其他集合,它均检查值的相等性。

尽管如此,Scala 2.13引入了表现不出所料的不可变数组。

目前,您可以使用.sameElements.deep进行比较。