我剛纔讀this question和偶然發現了以下報價:這可以在斯卡拉空?
斯卡拉把
==
,如果它被定義爲Any
類如下:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
的(null eq this)
部分使我想知道:是它實際上可以調用空指針的方法?可以在斯卡拉this
是null
?
我剛纔讀this question和偶然發現了以下報價:這可以在斯卡拉空?
斯卡拉把
==
,如果它被定義爲Any
類如下:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
的(null eq this)
部分使我想知道:是它實際上可以調用空指針的方法?可以在斯卡拉this
是null
?
檢查出Scala language specification,即6.3空值章:
null值是
scala.Null
類型的,並且因此與每個引用 類型兼容。它表示一個參考值,它指的是一個特殊的「空」對象。這個對象 實現了scala.AnyRef
類的方法如下:•
eq(x)
和==(x)
返回true,如果參數x
也是「空」的對象。•
ne(x)
和!=(x)
如果參數x
也不是「null」對象,則返回true。
這意味着,在語義上比較時,一些與null
文字或文字null
的東西你實際上指的是一種特殊的scala.Null
類的方法。將null
視爲該類別的簡寫。
當然在執行層面上它被優化了,並且使用了普通的null
。
null
是Null
類的唯一實例,它是一個有效的對象。 Null
是所有參考類型的子類型。
我對Scala很新穎,但我認爲這是可能的唯一方法是由於「null」本身是一個空實例,而不是像Java中的「null」這樣的特殊值。
http://blog.sanaulla.info/2009/07/12/nothingness/
這篇文章幫助我理解這一點更好。
你在抽象與實現混淆。抽象地說,可以調用'null'的方法,比如'=='。顯然,JVM上的實現不會調用空指針上的方法。 – 2012-04-09 14:48:34