今天在公司无意中碰到一个从来没碰到过的空指针异常= =

Java中,空指针异常应该是最常见的异常了。一般来说,碰到 NullPointerException 直接跳到报错的那一行就很容易就解决了。

不过有时候空指针异常不是那么容易看出来。

比如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public class NPExceptionDemo {
    
    long size;
    
    public static Long getSize() {
        return null;
    }

    public static void setSize(long size){
        this.size = size;
    }

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

本来我是奇怪,就算传一个null进去也是直接赋值给size啊,怎么会报了空指针呢。。

然后就javap了一把才发现,Java的自动装箱/拆箱机制具体是怎样的是解决这个异常的关键。

包装类转换到基本类型,会调用 Long.longValue() ,所以一旦传入的Long是个Null,那肯定会报空指针的!

事实证明,NullPointerException不会无缘无故出现的。。