null.==(obj)在scala中不引发null指针异常

null.==(obj)在scala中不引发null指针异常,scala,scala-collections,Scala,Scala Collections,我是斯卡拉的新手。请帮助我理解下面的代码片段 null.==("goutam") // ---> return false null.equals("goutam") // ---> throw NullPointerException 根据我的理解,null是null trait的唯一实例,它扩展了Anyref和==以及equals,两者都是Anyref的函数。那么为什么第一个语句不抛出,而第二个语句抛出 为什么第一个语句不抛出而第二个语句抛出 根据语言规范(6.3),在null

我是斯卡拉的新手。请帮助我理解下面的代码片段

null.==("goutam") // ---> return false
null.equals("goutam") // ---> throw NullPointerException
根据我的理解,null是null trait的唯一实例,它扩展了Anyref和==以及equals,两者都是Anyref的函数。那么为什么第一个语句不抛出,而第二个语句抛出

为什么第一个语句不抛出而第二个语句抛出

根据语言规范(6.3),在
null
上有一些特定的方法,这些方法在调用时不会导致
NullReferenceException
发生。它们被定义为:

6.3空值
null
值的类型为
scala.null
,因此 与所有引用类型兼容。它表示一个参考值 它引用一个特殊的“null”对象。此对象实现 类
scala.AnyRef
中的方法如下:

  • eq(x)
    ==(x)
    如果参数x也是“null”,则返回true 反对
  • ne(x)
    =(x) 
    如果参数x不是 “空”对象
  • isInstanceOf[T]
    始终返回false
  • asInstanceOf[T]
    返回类型T的默认值
  • ##
    返回0
对“null”对象的任何其他成员的引用会导致引发NullPointerException

equals
AnyRef
上定义,不按照定义处理
null
值<可以使用code>eq,它检查引用相等性(这通常不是您想要做的):

scala> null.==("goutam")
res0: Boolean = false

scala> null.eq("goutam")
res1: Boolean = false

=
确实正确地处理了
null
,这就是您应该使用的。关于这一点,在

中,
null.==(“goutam”)
不会抛出
NullPointerException
,因为这与
null==“goutam”
相同(只是不同的方法调用语法),您不会期望抛出NPE。