Scala学习笔记 之 对象相等("eq"和"==")

“eq”方法

Scala中的eq与Java中的==作用相同,也不能被重写,只能判断两个引用是否指向同一个对象。

“==”方法

在Java中,任何时候如果使用==,则将会调用Object中定义的equals方法,也就是说只能判断两个变量是否是同一个对象的引用。

在Scala中则有着更加智能化的==,其源代码如下(定义在Any类中):

1
2
final def == (that: Any): Boolean =
if (null eq this) {null eq that} else {this equals that}

其中final修饰词表示这个方法不能被重写(override)。

从上面的代码中也可以看出,对象的equals方法被调用,也就是说对象的相等操作是可以通过重写equals方法来实现的。例如:

1
2
3
4
5
6
7
override def equals(o: Any) = o match {
case q: Queue[T] => //this.toString == q.toString
if (isEmpty) q.isEmpty
else if (q.isEmpty) isEmpty
else head == q.head && tail == q.tail
case _ => false
}