18.7.23
1监徘、自動(dòng)拆箱有可能產(chǎn)生NPE渺贤。
類的Integer屬性沒有set值缨伊,直接在其他函數(shù)調(diào)用get方法,返回int類型伟葫。
Integer類型向int類型解箱。如果Integer類型為null院促,解箱就會(huì)拋異常NPE筏养。
2、Equals
Apple.equals("蘋果")常拓,如果Apple為null渐溶,則會(huì)拋異常NPE。
所以一般("蘋果").equals(Apple)
3弄抬、Map下NPE
Map 類集合 K/V 能不能存儲(chǔ) null 值的情況茎辐,如下表格:
集合類 Key Value Super 說明
Hashtable 不允許為 null 不允許為 null Dictionary 線程安全
ConcurrentHashMap 不允許為 null 不允許為 null AbstractMap 分段鎖技術(shù)
TreeMap 不允許為 null 允許為 null AbstractMap 線程不安全
HashMap 允許為 null 允許為 null AbstractMap 線程不安全
不允許為null的key和value,被不小心getA()獲取為null的情況掂恕,拋異常NPE拖陆。
4、遍歷List的時(shí)候add/remove
遍歷List的時(shí)候要用Iterator懊亡,期間可以add/remove
使用for遍歷List調(diào)用add/remove容易出問題依啰。
5、Arrays.toList()斋配,得到的List調(diào)用add/remove會(huì)報(bào)錯(cuò)孔飒,NPE
asList() 的返回對(duì)象是一個(gè) Arrays 內(nèi)部類,并沒有實(shí)現(xiàn)集合的修改方法艰争。
6坏瞄、List的toArray() 集合轉(zhuǎn)換數(shù)組,使用無參數(shù)的會(huì)報(bào)錯(cuò)NPE甩卓。
使用有參數(shù)的就沒問題鸠匀。
String[] array = new String[list.size()];
array = list.toArray(array);
7、subList 的使用
靠subList方法返回的新集合是靠原來的集合支持的逾柿,修改都會(huì)影響到彼此對(duì)方缀棍。在 subList 場(chǎng)景中宅此,高度注意對(duì)原集合元素個(gè)數(shù)的修改,會(huì)導(dǎo)致子列表的遍歷爬范、增加父腕、刪除均產(chǎn)生異常。
8青瀑、級(jí)聯(lián)調(diào)用容易產(chǎn)生NPE
if(!CollectionUtils.isEmpty(list))即使判斷空了璧亮,但是內(nèi)部的對(duì)象也容易為null拋出異常。
補(bǔ)充:
1斥难、數(shù)據(jù)庫的查詢結(jié)果可能為 null枝嘶。
2、遠(yuǎn)程調(diào)用對(duì)象時(shí)哑诊,一律要求進(jìn)行空指針判斷群扶,防止 NPE。
3镀裤、對(duì)于Session 中獲取的數(shù)據(jù)竞阐,建議 NPE 檢查,避免空指針淹禾。
4馁菜、級(jí)聯(lián)調(diào)用 obj.getA().getB().getC();一連串調(diào)用铃岔,易產(chǎn)生 NPE汪疮。
參考:http://www.cnblogs.com/mafly/p/trap.html
https://blog.csdn.net/u013310517/article/details/78219861