Scala класс и класс case == сравнение
Я не совсем понимаю, почему, когда мы сравниваем два экземпляра с теми же свойствами класса без переопределения метода equals
, что он даст false
. Но при сравнении двух экземпляров класса case он даст 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
A case class
реализует метод equals
для вас, а class
- нет. Следовательно, при сравнении двух объектов, реализованных как class
, которые не реализованы как case class
, то, что вы сравниваете, является адресом памяти объектов.
Это действительно те же проблемы, что и при работе с равенством в java. См. this. Запись блога Artima о написании на Java (и Scala) написана Биллом Веннерсом, Мартином Одерским и Лексом Лоуном.