首页 > 解决方案 > 为什么在 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 的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 原语。所以在这种情况下你不需要做空检查。


推荐阅读