天天看點

java.lang.NullPointerException常見原因及解決辦法

首先NullPointerException是RuntimeException的一個子類,這是運作時,在編譯時期不會觸發,是以這是最最最容易出現的線上bug;

java.lang.NullPointerException常見原因及解決辦法

容易出現空指針異常的場景

在調用對象方法時

比如處理字元串常用的replace方法,數組的length方法,map的size方法等等;

str.replace(…)

如果str為null,這裡就直接空指針了

判斷一個str是否等于"test",你直接str.equals(“test”)

還有像map.forEach()、list.stream() 、object.equals()、str.toString()…

類似的還有很多,太多了

在判斷對象是否為空時

這個是最坑的,導緻空指針的原因就是在調用對象方法時沒有對對象判空,但是有些小夥伴往往就是在這個環節出問題,明明對象判空的目的就是避免空指針,好家夥,到頭來這成了罪魁禍首

比如你在調用str.replace(…)時,意識到這裡應該對str做判斷,不為空才調用replace方法

于是你開開心心一臉自信

if(!str.isEmpty()){

}

或者

if(str.length()>0){

這麼一套操作下來以為自己的代碼天衣無縫,這破公司已經容不下我了

萬萬沒想到從一個坑掉進了另一個坑

str.isEmpty()、str.length()自身也會造成空指針

嘤嘤嘤~~~

對象判空技巧

我就直接給出幾個常用的

StringUtils.isNotBlank(str)

StringUtils.isNotEmpty(str)

object != null

太多了,這裡不一一列舉

總結和技巧

在調用對象方法前先判斷對象是否為空(不管是實體、變量、常量、map、list還是其他什麼)

在判斷對象是否為空時注意不要直接調用判空方法,判空方法特麼也是方法

盡量不要用str.toString(),改用String.valueOf()

比如你要判斷一個str是否等于"test",你不要str.equals(“test”),可以反過來"test".equals(str)

避免空指針遠不止上面這些方法,更多的還需要自己總結經驗。

繼續閱讀