若是你想比较一下看看两个对象是否相等,能够使用或者==,或它的反义 !=。(对全部对象都适用,而不单单是基本数据类型) java
scala> 1 == 2 res24: Boolean = false scala> 1 != 2 res25: Boolean = true
这些操做对全部对象都起做用,而不单单是基本类型。例如,你能够用他比较列表: 编程
scala> List(1, 2, 3) == List(1, 2, 3) res27: Boolean = true scala> List(1, 2, 3) == List(4, 5, 6) res28: Boolean = false
进一步,你还能够比较不一样类型的两个对象: spa
scala> 1 == 1.0 res29: Boolean = true scala> List(1, 2, 3) == "hello" res30: Boolean = false
你甚至能够比较null,或任何多是null 的东西。不会有任何异常被抛出: scala
scala> List(1, 2, 3) == null res31: Boolean = false scala> null == List(1, 2, 3) res32: Boolean = false
(但比较:null == null)时就报错了) code
规则:首先检查左侧是否为null,若是不是,调用equals 方法。因为equals是一个方法,所以比较的精度取决于左手边的参数。又因为已经有一个 自动的null检查,所以你不须要手动再检查一次了。
这种类型的比较对于不一样的对象也会产生 true,只要他们的内容是相同的而且它们的
equals 方法是基于内容编写的。例如,如下是刚好都有五个一样字母的两个字串的比较: 对象
scala> ( "he" + "llo") == "hello" res33: Boolean = true
Scala 的==与Java的有何差异 内存
Java 里的既能够比较基本类型也能够比较引用类型。对于基本类型,Java 的==比较 值比较,如Scala。然而对于引用类型,Java 的==比较了引用的是否为同一个对象(比较内存地址),也就是说这两个变量是否都指向于JVM 堆里的同一个对象。Scala 也提供了这 种机制,名字是 eq。不过,eq和它的反义词,ne,仅仅应用于 能够直接映射到Java的对 象。 |
object BitOpt { class A{} def main(args:Array[String]){ val a = new A val b = new A println(a==b) println(a eq b) println(a ne b) println(!a.eq(b)) } } 结果: false false true true
参考自《Scala编程》 ci