遇到了一个空指针错误,我需要更清楚地理解它为什么抛出它

时间:2014-11-11 03:16:57

标签: java

正在使用java和实际数据库值进行更多操作,并且遇到了一个隐藏在工作代码中的有趣的空指针错误。 所以有3个变量:

double x = data.getValue1; //this returns 0.0 from database 
double y = data.getValue2; //this returns a null from database
double z = 0; //variable is initialised

double z = x*y; //same as (z = 0.0 * null;) 

现在,如果xy返回实际值,但当此值0.0null时无法使用此代码。

double z进一步用于总计算。我们说

double grandTotal = z + (another double value) + (another double value);

但由于z。

,双重grandTotal将无效

现在我需要解释为什么会发生这种情况以及如何更好地处理这种情况,以便在z或其他双重值落入该情况时,它不会影响grandTotal对其所有值的求和

2 个答案:

答案 0 :(得分:2)

double类型(称为原语)(小写版本,如果您愿意)不能为空。原始值初始化为0.0(浮点数和双精度数)和0(整数,长整数等)。

对象版本Double(注意大写),可以为null。如果getValue2字段的类型为Double(而不是double),并且它为null,并且您尝试将其分配给原始值,则称为unboxing的进程(如上所述)发生August),最终会出现空指针异常(NPE)。

否则,如果getValue2实际上是double(注意小写),那么你只需返回0.0,正常的计算可以从那里正常进行(尽管可能没有你期待的结果。)

正如Hovercraft所说,只是检查一个空值可能是一个可以接受的解决方案。

答案 1 :(得分:1)

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

如果您通过ResultSet.getDouble()获取数据,请使用ResultSet.wasNull()

请参阅here以获取更多信息和this