Gou*_*ury 4 scala scala-collections
我是斯卡拉的新手.请帮我理解下面的代码片段
null.==("goutam") // ---> return false
null.equals("goutam") // ---> throw NullPointerException
Run Code Online (Sandbox Code Playgroud)
根据我的理解,null是Null特征的唯一实例,它扩展了Anyref和==,并且两者都是AnyRef的函数.那么为什么第一个声明不会抛出而第二个声明呢?
为什么第一个声明不会抛出但第二个声明不抛出
根据语言规范(6.3),有一些特定的方法,如果被调用,null它们不会导致NullReferenceException发生.它们被定义为:
6.3空值
的
null值的类型的scala.Null,并且因此与每个引用类型兼容.它表示引用特殊"空"对象的引用值.该对象在类scala.AnyRef中实现如下方法:
eq(x)==(x)如果参数x也是"null"对象,则返回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
Run Code Online (Sandbox Code Playgroud)
==确实处理null得当,这就是你应该使用的.更多关于什么是Scala中==和.equals之间的区别?
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |