关于(param)报空指针

时间:2025-03-17 08:07:37

今天遇到了一个很奇葩的错误,大致现象如下:

Integer unfinishedQty = (()) - 0;

程序中有一行类似于这样的代码,报了个“空指针异常”,我还问了老同事,valueOf不是不会报空指针么?同事说不会,就算报异常,也应该会报 ,数字转换异常。可是,这一行确实报了空指针,但是有一点我可以肯定,obj这个对象肯定是不为null的,不然走不到这一行,原因我就不多说了。

后来经过多种调试(当时以为传入valueOf中的参数是字符串类型的),调试如下:

public static void main(String[] args) {
((null));
}

然后又试了试,以为可能得给参数一个变量,于是有了如下测试:

public static void main(String[] args) {

String a = null;
((a));
}

还是报

就是不报空指针;后来经过查看,发现代码中传入的参数是Integer类型的,于是不死心,又试了一下:

public static void main(String[] args) {

Integer a = null;
((a));
}

果然,报了空指针,但是一直想不明白,后来查看了valueOf源代码:

入参为String类型:

 public static Integer valueOf(String s) throws NumberFormatException
    {
return new Integer(parseInt(s, 10));
    }

入参为int类型:

  public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache 
    return [i + offset];
}
        return new Integer(i);
    }

我的代码中调用的为int类型入参的valueOf,而我传参穿的为Integer类型的,在真正调用该方法前,编译时会自动将Integer拆箱成Int类型的,而int类型变量值的不能为null,所以在拆箱的过程中,报了空指针异常。

这个问题我也真是费解了半天呀。希望对大家有所帮助,如果哪里不太正确,欢迎纠错。