Java空指针异常的底层逻辑

底层逻辑

在Java里面

这两句“代码”

是 NullPointerException 的底层逻辑

因为

只有你在尝试调用 null 的某个方法

或者 null 的某个属性的时候

系统才会抛出这个 NullPointerException

所以只要我们理解了这个原理

我们在碰到 NullPointerException 的时候

就很容易排查

举个例子哈

这是一个空指针的异常

我们就去找到这个堆栈信息里面

第一行错误信息所指示的那行代码

然后呢就去找所有的点

点前面的东西看哪个为空

比如说这个 stu 如果为空

调用 null.getAddress() 的方法

那如果

这个 getAddress 为空呢

相当于我们在尝试调用

null 的 getZipCode() 方法

所以呢我们再回过头来看

这个 stu 不可能为空

因为他这调过setName

如果他为空的话

在15行就会报空指针了

所以呢他一定是这个 getAddress 为空

他在尝试调用null的getZipCode方法

那有没有可能它(整体)为空(导致的空指针)呢

没有!因为它为空 系统不会报空指针

因为我们没有吊null的什么方法

或者什么属性

那如果我们不考虑这个代码的合理性哈

比如这还有一个 .trim()

这就不能确定具体哪个为空了

因为有可能是整个 zipcode 返回了空

也有可能是 address 为空

说到这呢当然了

我们这个方法在java8+里边

还可以这样写

Optional.ofNullable

然后 map

map...zipCode 然后呢再 map...trim

比如我们叫test

这样的话

他是不会报空的针的

因为中间如果有一个为空的话

他就会走orElse了

再见

最后更新于