如何检查double是否为null?

tyl*_*hes 37 java database double null

我正在查询数据库,我得到的一些结果是空的.我将这些值设置为数据类型为double的变量.我们将变量称为"结果".所以我尝试设置一个if语句来看它等于Null当然不起作用.以下是我对if语句的代码:

if (results == null)
{
     results = 0;
}
Run Code Online (Sandbox Code Playgroud)

我用这段代码得到的错误是:

对于参数类型double,null,运算符==未定义

有没有更好的方法来确定它是否为空?

Ste*_*n C 48

首先,Java double不能为null,也不能与Java进行比较null.(double类型是基本(非引用)类型,基本类型不能为null.)

接下来,如果您调用ResultSet.getDouble(...),返回的double不是a Double,则记录的行为是NULL(来自数据库)将返回为零.(参见上面链接的javadoc.)如果零是该列的合法值,则无济于事.

所以你的选择是:

getObject方法将值作为Double(假设列类型为double)传递,并记录为返回nullNULL.(有关更多信息,此页面记录了SQL类型到Java类型的默认映射,因此应该getObject提供您应该提供的实际类型.)


Tob*_*les 37

我建议使用Double而不是double作为你的类型然后你检查null.

  • 警告 - 简单地将`results`声明为`Double`而不是`double`将无法解决问题.`Double results = rs.getDouble();`将**永远不会**为`结果`分配一个`null`. (13认同)
  • 但这不是问的问题.在OP提出的情况下,这个解决方案根本不起作用. (2认同)

oni*_*nit 6

Java中的double原语永远不能为null.如果没有为它赋值,它将被初始化为0.0(除非声明一个局部双变量而没有赋值,但这会产生编译时错误).

这里有关于默认原始值的更多信息.

  • 如果它们是实例变量,它们将仅初始化为0.0.否则他们没有价值,甚至没有价值. (2认同)

dan*_*ben 6

说某物“为空”意味着它是对空值的引用。基元(int、double、float 等)根据定义不是引用类型,因此它们不能有空值。在这种情况下,您将需要找出您的数据库包装器将执行的操作。