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

相關文章
相關標籤/搜索