我不太明白为什么当我们将两个实例与一个类的相同属性进行比较而不重写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
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释原因吗?
whe*_*ies 52
A 为您case class实现equals方法而class不是.因此,当您比较两个实现为a的对象class时case class,您要比较的是对象的内存地址.
这与您必须在Java中处理相等性时的问题完全相同.请参阅这篇Artima博客文章,内容涉及equals由Bill Venners,Martin Odersky和Lex Spoon 编写的Java(和Scala).