我是一名学习Scala的人,遇到了以下难题。
我可以定义以下case类:
abstract class Expr
case class Number(n: Int) extends Expr
当我从类
Number
创建两个实例并进行比较时val x1 = Number(1)
val x2 = Number(1)
x1 == x2
我有以下结果:
x1: Number = Number(1)
x2: Number = Number(1)
res0: Boolean = true
因此,x1
和x2
是相同的。
然而,如果我在Number
类定义中删除case
修饰符,即
abstract class Expr
class Number(n: Int) extends Expr
然后以相同的方式比较两个Number
类的实例
val x1 = new Number(1)
val x2 = new Number(1)
x1 == x2
我有以下输出:
x1: Number = Number@1175e2db x2: Number = Number@61064425 res0: Boolean = false 这里表明,这一次 x1 和 x2 是不同的。
你能告诉我为什么吗?在比较两个实例方面,case 有什么区别呢?
谢谢, Pan
val x2 = Number(2)
,实际上应该是val x2 = Number(1)
。我已经更正了它。 - panc