我刚看了this question并偶然发现了以下引用:
Scala将
==
视为在课程Any
中定义如下:final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
(null eq this)
部分让我想知道:实际上是否可以在空指针上调用方法? Scala中this
可以null
吗?
答案 0 :(得分:8)
查看Scala language specification,即 6.3 The Null Value 章节:
null值的类型为
如果参数scala.Null
,因此与每个引用兼容 类型。它表示一个引用值,它引用一个特殊的“null”对象。这个对象 实现类scala.AnyRef
中的方法,如下所示:eq(x)
也是“null”对象,则•
如果参数==(x)
和x
返回true。ne(x)
不是“null”对象,则•
!=(x)
和x
返回true。
这意味着,当您将null
文字或null
文字的内容与实际上指的是特殊scala.Null
类的方法进行比较时,语义上。将null
字面值视为该类的简写。
当然,在实施级别,它已经过优化,并且使用了普通 null
。
答案 1 :(得分:3)
null
是Null
类的唯一实例,它是一个有效的对象。 Null
是所有引用类型的子类型。
答案 2 :(得分:1)
我对Scala很新,但我认为可能的唯一方法是由于“null”本身是Null的一个实例,而不是像Java中的“null”这样的特殊值。
http://blog.sanaulla.info/2009/07/12/nothingness/
这篇文章帮助我更好地理解了这一点。