问题描述
重构计量项目后台,运行单元测试时,遇到了错误。
第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
隐式调用方法,所以就空指针异常。
解决
实例化的时候维护上倍数。
运行单元测试,通过!
总结
有时候,很多奇奇怪怪的问题,往往都有很简单的解释,只是我们一时没想到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。