Java判断int与Integer是否相等空指针异常

Exception in thread “main” java.lang.NullPointerException.

一、问题描述

public class Req{
    private Integer a;
    public static void main(String[] args) {
        Req req = new Req();
        if(1 == req.getA()){
            System.out.println("a等于1");
        }
    }
}

类似以上代码,在执行中报了空指针异常,且出错位置就在if判断中,但是if判断不就req.getA()一个地方进行了方法调用吗?而且req也进行了初始化,就算变量a未赋值,按默认初始值也是1 == null,顶多是false,为什么会空指针呢?百思不得其解,最后向朋友求助得出了答案。

二、解决

数值1为int类型,变量a为Integer引用类型,默认初值为null,其又是int的包装类,在与int进行比较时触发自动拆箱a.intValue(),而此时a为null所以就引发了空指针。

  • 正确逻辑

    public class Req{
        private Integer a;
        public static void main(String[] args) {
            Req req = new Req();
            if(null != req.getA() && 1 == req.getA()){
                System.out.println("a等于1");
            }
        }
    }