scala - 为什么在 Scala 中这条语句不是 NullPointerException?null.asInstanceOf[双]
问题描述
我来自Java
,并试图理解以下Scala
语法
null.asInstanceOf[Double]
为什么这不是 NullPointerException?
我试图做类似的事情:
var d : Double = 0
if(d == null)
// do something
但是,我收到以下错误消息:
comparing values of types Double and Null using `==' will always yield false
当我按照这个答案更改为时,这个问题得到了null
解决,null.asInstanceOf[Double]
但这对我来说是一个奇怪的陈述,这到底是如何工作的?
解决方案
Scala 的scala.Double
不对应于 Java 的java.lang.Double
. Scala 的 double 继承自AnyVal
,所有值类型的父级。它最接近double
于 Java 中的原始类型,不能为空。当你这样做时null.asInstanceOf[Double]
,你实际上得到的是双精度值0.0
,而不是空双精度。
来自 Scala 语言规范第 6.3 节
[null 值] 在 scala.AnyRef 中实现方法如下
...
- asInstanceOf[T] 返回类型 T 的默认值
并且默认值Double
为零。
因此,简而言之,您的值不可能为 null,因为它类似于 Java 原语。所以在这种情况下你不需要做空检查。
推荐阅读
- java - JVM:Java 运行时环境检测到致命错误
- mongodb - 如何在后端实现基于角色的访问控制
- twilio - 如何删除 Twilio 消息服务
- php - 如何在 PHP 应用程序中显示 Amazon Lex 聊天窗口?
- php - fputcsv 生成没有换行符的行
- python - 更多按钮单击和下一步按钮
- spring-boot - 我无法使用 Spring + Thymeleaf 编辑现有对象
- python - Python:TypeError:“类型”和“类型”的实例之间不支持“<”。Model.fit() 不起作用
- rdf - OWL 中的新类,我应该使用哪个约束?
- python - 无法从“sklearn.feature_extraction”导入名称“stop_words”