Java 基本类型与包装类应用过程中出现的问题

很明显,下面这段代码会出现NullPointerException!报错的位置应该在被调用方法的第一行;但是实际情况是在红色行;

public static void main(String[] args) {
    Person person = new Person();
    multiply(person.getWeight(),100);                  
}
public static double multiply(double multiplicand, double multiplier) {
    BigDecimal n1 = BigDecimal.valueOf(multiplicand);
    BigDecimal n2 = BigDecimal.valueOf(multiplier);
    BigDecimal value = n1.multiply(n2);
    return value.doubleValue();
}
 一般空指针产生原因都是  object.method(); object==null;
 红色行出现空指针异常第一想法应该是person为null,但是看代码person不可能为null;
      查看调用方法发现方法传参为double基本类型,而null并不是基本类型,正常来讲如果传参直接为null是调用不到那个方法的,但是编译时不能知道传入参数的实际值,因此编译通过了;
 但是在运行的过程中检查出来了,参数根本就不能传进方法中,因此错误报在了外面红色行;不过报空指针还是有点措手不及;
  建议方法的参数定义时采用包装类型,这样异常栈会准确一点,便于排查问题;虽然NullPointerException
很明显说明了问题的根本原因,但是在排查具体哪里原因时,确实花费了很多时间,由于线上故障无法debug,光看代码真的没发现哪里会出现NullPointerException,直到debug时发现没有进入到被调用方法里面的断点才确定问题所在;

猜你喜欢

转载自blog.csdn.net/jackieriver/article/details/79190091