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了
再见