scala case类的equals()方法是否始终正常工作?

时间:2015-03-20 21:24:28

标签: string scala equals case-class

我有一个案例类,它有2个LongString类型的参数。我假设自动生成的equals()方法可以按预期工作(这意味着它确实检查(Long, String)对是否相同),但显然它并不总是这样做。似乎Scala生成了equals方法,在该方法中,它使用==运算符检查每个成员的相等性。这是对的吗?

1 个答案:

答案 0 :(得分:3)

在Scala中,equals==基本相同,只有==处理null,正如here所解释的那样,或{{3} }}:

  

表达式x == that相当于if (x eq null) that eq null else x.equals(that)

建议一般使用==。使用eq(罕见)检查引用相等性。

对于案例类,equals会自动实施(因此==路由到equals也是如此:

case class Foo(a: Long, b: String)
val foo1 = Foo(1L, "")
val foo2 = Foo(1L, "")
val foo3 = Foo(2L, "")

foo1 == foo2 //true
foo1.equals(foo2) //true

foo1 == foo3 //false
foo1.equals(foo3) //false

来自docs

  

对于每个案例类,Scala编译器都会生成equals方法   它实现了结构相等性和toString方法。