Je ne comprends pas très bien pourquoi, lorsque nous comparons deux instances avec les mêmes propriétés d'une classe sans remplacer la méthode equals
, cela donnera un false
. Mais cela donnera un true
lorsque nous comparerons deux instances d'une classe de cas. Par exemple
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
}
Quelqu'un pourrait-il expliquer pourquoi, s'il vous plaît?
UNE case class
implémente pour vous la méthode equals
, contrairement à class
. Par conséquent, lorsque vous comparez deux objets implémentés en tant que class
, au lieu de case class
, ce que vous comparez, c'est l'adresse mémoire des objets.
Ce sont vraiment les mêmes problèmes que lorsque vous devez gérer l'égalité en Java. Voir cet article de blog Artima sur l'écriture de equals
en Java (et Scala) écrit par Bill Venners, Martin Odersky et Lex Spoon.