代码之家  ›  专栏  ›  技术社区  ›  olle kullberg

带有`==`运算符的数组类型的奇怪行为

  •  10
  • olle kullberg  · 技术社区  · 16 年前
    scala> List(1,2,3) == List(1,2,3)
    
    res2: Boolean = true
    
    scala> Map(1 -> "Olle") == Map(1 -> "Olle")
    
    res3: Boolean = true
    

    但是当尝试对数组执行相同的操作时,它的工作方式就不一样了。为什么?

    scala> Array('a','b') == Array('a','b')
    
    res4: Boolean = false
    

    2 回复  |  直到 8 年前
        1
  •  19
  •   Stephen    16 年前

    因为数组“equals”的定义是它们引用同一个数组。

    Object.Equals ,所以它比较了参考文献。

    如果要检查成对元素,请使用 sameElements

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

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

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

    array equality

        2
  •  2
  •   Johnny    8 年前

    根本原因是 Java ,这是唯一一个不支持 ==

    此外,重要的是要注意,选择的答案表明同样 sameElements deep 实际使用时的比较:

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

    或者,因为现在我们可以使用 == 再来一次:

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

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

    相同元素 不会用于嵌套数组,它不是递归的。以及 深的

    推荐文章