Scala对象比较==、eq、ne与java==、equals()

若是你想比较一下看看两个对象是否相等,能够使用或者==,或它的反义 !=。(对全部对象都适用,而不单单是基本数据类型) 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

相关文章
相关标签/搜索