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时发现没有进入到被调用方法里面的断点才确定问题所在;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值