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也是“null”,则返回true 反对李>==(x)
和ne(x)
如果参数x不是 “空”对象李>=(x)
始终返回false李>isInstanceOf[T]
返回类型T的默认值asInstanceOf[T]
返回0##
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。