印象深刻的Java空指针异常

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

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不会无缘无故出现的。。