正在使用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;)
现在,如果x
和y
返回实际值,但当此值0.0
和null
时无法使用此代码。
double z
进一步用于总计算。我们说
double grandTotal = z + (another double value) + (another double value);
但由于z。
,双重grandTotal将无效现在我需要解释为什么会发生这种情况以及如何更好地处理这种情况,以便在z
或其他双重值落入该情况时,它不会影响grandTotal
对其所有值的求和
答案 0 :(得分:2)
double
类型(称为原语)(小写版本,如果您愿意)不能为空。原始值初始化为0.0(浮点数和双精度数)和0(整数,长整数等)。
对象版本Double(注意大写),可以为null。如果getValue2字段的类型为Double
(而不是double
),并且它为null,并且您尝试将其分配给原始值,则称为unboxing的进程(如上所述)发生August),最终会出现空指针异常(NPE)。
否则,如果getValue2
实际上是double
(注意小写),那么你只需返回0.0,正常的计算可以从那里正常进行(尽管可能没有你期待的结果。)
正如Hovercraft所说,只是检查一个空值可能是一个可以接受的解决方案。
答案 1 :(得分:1)