若是你想比較一下看看兩個對象是否相等,能夠使用或者==,或它的反義 !=。(對全部對象都適用,而不單單是基本數據類型) 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