在Scala中这可以为null吗?

时间:2012-04-09 11:41:18

标签: scala null this

我刚看了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吗?

3 个答案:

答案 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)

nullNull类的唯一实例,它是一个有效的对象。 Null是所有引用类型的子类型。

答案 2 :(得分:1)

我对Scala很新,但我认为可能的唯一方法是由于“null”本身是Null的一个实例,而不是像Java中的“null”这样的特殊值。

http://blog.sanaulla.info/2009/07/12/nothingness/

这篇文章帮助我更好地理解了这一点。