scala - 比较 Seq 和 Array 的不同行为

标签 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

为什么会这样?背后的原因是什么?

最佳答案

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

Array 是唯一一个 == 检查引用相等性的 Scala 集合,对于所有其他它委托(delegate)给 .equals 检查值相等性。

不过,Scala 2.13 引入了不可变数组,其行为符合预期。

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

关于scala - 比较 Seq 和 Array 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109050/

相关文章:

scala - 使用默认工具在 Scala/Play 中连接自定义用户名

emacs - 无限循环关闭ensime

scala - 如何将 Scala 数组转换为 Java 列表?

list - 获取最大尺寸列表的有效方法

algorithm - 在 scala 中使用 actors 进行二进制搜索?

scala - Java库不公开Scala类

java - 我如何在 Java 中比较字符串?

c# - 是否有 C++ std::is_same 类模板的 C# 类似物?

c# - IEnumerable.GroupBy 不分组

scala - 集合中 AnyVals 的最佳 FP 习语