比较 Seq 和 Array 的不同行为
Compare Seq and Array different behavior
Scala 似乎将 Seq
s 视为单个对象,但与 Array
s 不同。
Seq
与 List
、Set
.
的行为相同
scala> Array(1) == Array(1)
res2: Boolean = false
scala> Seq(1) == Seq(1)
res3: Boolean = true
为什么会这样?背后的原因是什么?
这是因为 Array 本质上是 Java 的数组的别名,它将 equals 实现为引用相等 - 只有当两个变量指向同一个数组实例时才返回 true。
Array 是唯一一个 ==
检查引用相等性的 Scala 集合,对于所有其他它委托给 .equals 检查值相等性。
不过,Scala 2.13 引入了不可变数组,其行为符合预期。
目前,您可以使用 .sameElements
或 .deep
进行比较。
Scala 似乎将 Seq
s 视为单个对象,但与 Array
s 不同。
Seq
与 List
、Set
.
scala> Array(1) == Array(1)
res2: Boolean = false
scala> Seq(1) == Seq(1)
res3: Boolean = true
为什么会这样?背后的原因是什么?
这是因为 Array 本质上是 Java 的数组的别名,它将 equals 实现为引用相等 - 只有当两个变量指向同一个数组实例时才返回 true。
Array 是唯一一个 ==
检查引用相等性的 Scala 集合,对于所有其他它委托给 .equals 检查值相等性。
不过,Scala 2.13 引入了不可变数组,其行为符合预期。
目前,您可以使用 .sameElements
或 .deep
进行比较。