3

问题描述

重构计量项目后台,运行单元测试时,遇到了错误。

clipboard.png

145行:

clipboard.png

又没有在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();
    }
}

运行结果:

clipboard.png

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();
    }
}

运行结果:

clipboard.png

分析

看了两个运行结果,大体应该就能分析出来原因了。

Doubledouble的包装类。double是基本数据类型,默认值为0.0Double为类类型,默认值为null

clipboard.png

就像将Double对象赋值给基本类型double时,是不会报错的,因为有一层隐式调用,将Double转化为double

而我猜想这里的空指针应该也和这个有关系,对象是没法乘的,所以隐式调用转化为double,然后再运算。

因为没有初始化,所以Double对象默认是null,在null隐式调用方法,所以就空指针异常。

解决

实例化的时候维护上倍数。

clipboard.png

运行单元测试,通过!

clipboard.png

总结

有时候,很多奇奇怪怪的问题,往往都有很简单的解释,只是我们一时没想到。


张喜硕
2.1k 声望423 粉丝

浅梦辄止,书墨未浓。


« 上一篇
JPA 内嵌对象
下一篇 »
项目重构总结