[英]null.==(obj) does not throw null pointer exception in scala
我是斯卡拉的新手。 请帮我理解下面的代码片段
null.==("goutam") // ---> return false
null.equals("goutam") // ---> throw NullPointerException
根据我的理解,null是Null特征的唯一实例,它扩展了Anyref和==,并且两者都是AnyRef的函数。 那么为什么第一个声明不会抛出而第二个声明呢?
为什么第一个声明不会抛出但第二个声明不抛出
根据语言规范(6.3), null
上有特定的方法,如果调用它们不会导致NullReferenceException
发生。 它们被定义为:
6.3空值
null
值的类型为scala.Null
,因此与每个引用类型兼容。 它表示引用特殊“空”对象的引用值。 此对象在类scala.AnyRef
实现方法,如下所示:
- 如果参数x也是“null”对象,则
eq(x)
和==(x)
返回true。ne(x)
和!=(x)
如果参数x不是“null”对象,则返回true。isInstanceOf[T]
始终返回false。asInstanceOf[T]
返回类型T的默认值。##
返回0。对“null”对象的任何其他成员的引用会导致抛出NullPointerException 。
equals
在AnyRef
上定义,并且不按照定义处理null
值。 eq
来检查引用相等性 (通常不是你想要做的):
scala> null.==("goutam")
res0: Boolean = false
scala> null.eq("goutam")
res1: Boolean = false
==
确实正确处理null
,这就是你应该使用的。 更多关于什么是Scala中==和.equals之间的区别?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.