Scala类和case类==比较

时间:2014-02-28 18:40:33

标签: scala equality

我不太明白为什么当我们将两个实例与一个类的相同属性进行比较而不重写equals方法时它会给出false。但是当我们比较一个案例类的两个实例时,它会给出一个true。例如

 class A(val name: String, val id: Int)
 case class B(name: String, id: Int)

 object Test {
    val a1 = new A('a',1)
    val a2 = new A('a',1)
    println(a1 == a2)   //this returns false

    var b1 = B('b',1)
    var b2 = B('b',1)
    println(b1 == b2)   //this returns true

 }

有人可以解释原因吗?

1 个答案:

答案 0 :(得分:46)

class方法,而class则没有。因此,当您比较实现为case class而不是equals的两个对象时,您要比较的是对象的内存地址。

与您在Java中处理相等性时的问题完全相同。请参阅由Bill Venners,Martin Odersky和Lex Spoon撰写的关于在Java(和Scala)中编写{{1}}的{​​{3}}。