问题描述
重构计量项目后台,运行单元测试时,遇到了错误。
第145行:
又没有在null上调方法,两个Double相乘,怎么会空指针呢?
尝试
打开IDEA新建一个普通的Java项目。
double
package com.mengyunzhi;
public class Main {
double testDouble;
private void test() {
System.out.println(testDouble);
double result = testDouble * 10;
}
public static void main(String[] args) {
Main main = new Main();
main.test();
}
}
运行结果:
Double
package com.mengyunzhi;
public class Main {
Double testDouble;
private void test() {
System.out.println(testDouble);
Double result = testDouble * 10;
}
public static void main(String[] args) {
Main main = new Main();
main.test();
}
}
运行结果:
分析
看了两个运行结果,大体应该就能分析出来原因了。
Double是double的包装类。double是基本数据类型,默认值为0.0;Double为类类型,默认值为null。
就像将Double对象赋值给基本类型double时,是不会报错的,因为有一层隐式调用,将Double转化为double。
而我猜想这里的空指针应该也和这个有关系,对象是没法乘的,所以隐式调用转化为double,然后再运算。
因为没有初始化,所以Double对象默认是null,在null隐式调用方法,所以就空指针异常。
解决
实例化的时候维护上倍数。
运行单元测试,通过!
总结
有时候,很多奇奇怪怪的问题,往往都有很简单的解释,只是我们一时没想到。