您的位置:首页 > 编程语言 > Java开发

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

2018-01-28 22:12 211 查看
很明显,下面这段代码会出现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时发现没有进入到被调用方法里面的断点才确定问题所在;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: