自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala對(duì)象的相等性比較

開發(fā) 后端
本文節(jié)選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第五章。Scala是一種針對(duì) JVM 將函數(shù)和面向?qū)ο蠹夹g(shù)組合在一起的編程語言。

如果你想比較一下看看兩個(gè)Scala對(duì)象是否相等,可以使用或者==,或它的反義!=。下面舉幾個(gè)例子:

  1. scala> 1 == 2 
  2. res24: Boolean = false 
  3. scala> 1 != 2 
  4. res25: Boolean = true 
  5. scala> 2 == 2 
  6. res26: Boolean = true 
這些操作對(duì)所有對(duì)象都起作用,而不僅僅是基本類型。例如,你可以用他比較列表:

  1. scala> List(123) == List(123)  
  2. res27: Boolean = true 
  3. scala> List(123) == List(456)  
  4. res28: Boolean = false 
進(jìn)一步,你還可以比較不同類型的兩個(gè)對(duì)象:

  1. scala> 1 == 1.0 
  2. res29: Boolean = true 
  3. scala> List(123) == "hello" 
  4. res30: Boolean = false 
你甚至可以比較null,或任何可能是null的東西。不會(huì)有任何異常被拋出:

  1. scala> List(123) == null 
  2. res31: Boolean = false 
  3. scala> null == List(123)  
  4. res32: Boolean = false 
如你所見,==已經(jīng)被仔細(xì)地加工過,因此在許多情況下你都可以得到你想要的相等性的比較。這只是用了一個(gè)非常簡(jiǎn)單的規(guī)則:首先檢查左側(cè)是否為null,如果不是,調(diào)用equals方法。由于equals是一個(gè)方法,因此比較的精度取決于左手邊的參數(shù)。又由于已經(jīng)有一個(gè)自動(dòng)的null檢查,因此你不需要手動(dòng)再檢查一次了。自動(dòng)檢查機(jī)制不會(huì)檢查右手側(cè)的參數(shù),但是任何合理的equals方法都應(yīng)在參數(shù)為null的時(shí)候返回false。

這種類型的比較對(duì)于不同的對(duì)象也會(huì)產(chǎn)生true,只要他們的內(nèi)容是相同的并且它們的equals方法是基于內(nèi)容編寫的。例如,以下是恰好都有五個(gè)同樣字母的兩個(gè)字串的比較:

  1. scala> ("he" + "llo") == "hello" 
  2. res33: Boolean = true 
Scala的==與Java的有何差別

Java里的既可以比較原始類型也可以比較參考類型。對(duì)于原始類型,Java的==比較值的相等性,如Scala。然而對(duì)于參考類型,Java的==比較了參考相等性:reference equality,也就是說這兩個(gè)變量是否都指向于JVM堆里的同一個(gè)對(duì)象。Scala也提供了這種機(jī)制,名字是eq。不過,eq和它的反義詞,ne,僅僅應(yīng)用于可以直接映射到Java的對(duì)象。

【相關(guān)閱讀】

  1. Scala的數(shù)學(xué)運(yùn)算、關(guān)系和邏輯操作及位操作符
  2. Scala的操作符:任何方法都可以是操作符
  3. Scala的基本類型及文本化
  4. Scala程序及其Application特質(zhì)
  5. Scala程序中的分號(hào)推斷和Singleton對(duì)象
責(zé)任編輯:book05 來源: Artima
相關(guān)推薦

2011-12-16 14:34:22

Java

2011-06-28 09:51:08

.NET對(duì)象相等

2009-07-21 12:18:37

ScalaRational對(duì)象toString

2012-12-03 10:26:51

Scala

2009-07-22 09:22:20

Scala工廠對(duì)象

2020-12-29 06:44:18

GoScala編程語言

2009-09-09 11:14:16

Scala對(duì)象

2010-11-17 11:31:22

Scala基礎(chǔ)面向?qū)ο?/a>Scala

2010-03-11 10:34:22

Scala

2009-06-22 14:26:12

ScalaXML對(duì)象

2011-06-28 11:06:16

Scala

2009-07-20 18:03:26

Scala程序Singleton對(duì)象

2011-03-18 19:37:38

Eventable接口QtWidget

2009-06-16 17:09:17

Scala面向?qū)ο?/a>函數(shù)編程

2011-06-28 11:05:19

Qt QWidget Eventable

2009-12-11 10:43:00

Scala講座操作符函數(shù)

2009-07-08 16:10:24

Scala簡(jiǎn)介面向?qū)ο?/a>函數(shù)式

2009-09-27 15:29:00

Scala講座面向?qū)ο?/a>Scala

2009-07-08 12:43:59

Scala ServlScala語言

2010-09-14 15:34:41

Scala
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)