繁体   English   中英

null。==(obj)不会在scala中抛出空指针异常

[英]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

equalsAnyRef上定义,并且不按照定义处理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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM