如果想要比较一下看看两个对象是否相等,可以使用==,或它的反义 != 。如例:
这些操作对所有对象都起作用,而不仅仅是基本类型。例如可以用它来比较列表:
进一步,还可以用来比较不同类型的两个对象:
甚至可以比较null或任何可能是null的东西。不会有任何异常被抛出:
如上所示,==已经被仔细地加工过,因此在多数情况下都可以实现合适的相等性比较。这种比较遵循一种非常简单的规则:首先检查左侧是否为null,如果不是,调用左侧操作数的equals方法。而精确的比较取决于左操作数的equals方法定义。由于有了自动的null检查,因此不需要手动再检查一次了。注意,看下面这个例子:
好像变量确定了类型之后,再比较null的相等性,才不会报警告!!
这种比较即使发生在不同的对象之间也会产生true,只要比较的两者内容相同并且equals方法是基于内容编写的。例如,以下是恰好都有五个相同字母的两个字符串的比较:
Scala的==与Java的有何差别
Java里==既可以比较原始类型也可以比较引用类型。对于原始类型,java的==比较值的相等性与scala一致。而对于引用类型,Java的==比较了引用的相等性,也就是说比较的是这两个变量是否都指向JVM堆里的同一个对象。Scala也提供了这种机制,名字是:eq 。不过,eq 和它的反义词 ne,仅仅应用于可以直接映射到Java的对象,这个我们后面在讲解。可以看下示例:
object T4 {
class A{}
def main(args: Array[String]): Unit = {
val a = new A
val b = new A
println(a == b) //false
println(a eq b) //false
println(a ne b) //true
println(a.eq(b)) //false
}
}