null的問題:
JAVA類型有基礎變數類型、參考型別。
(1)對基礎變數類型,如果未經初始化JAVA會自動開闢空間並賦值。int、byte、short、long為0;float、double為0.0;boolean為false。
(2)對引用變數類型,JAVA同樣會對未經初始化的變數自動賦值,為NULL。
(因為NULL指的是不確定對象,所以適用於參考型別,不適用於基礎變數類型。)
再說NullPointerException異常
指標,就是java中的對象的引用。比如String a;這個a就是指標。
null 指標NullPointer,指標的內容為空白,比如指標a,如果令它指向null,就是null 指標。
null 指標異常NullPointerException,一個指標為NULL。本身對象就為空白了,沒有方法給你調用,你在使用該對象的方法,就強人所難了。再說未經初始化的變數JAVA會自動報錯。比如String a=null,你還要用a的方法,比如a.equals( String x);那就會產生null 指標異常。
項目中遇到很多了NullPointerException問題,大致一下集中情況:
(1)定義了一個對象引用,但是沒有new 直接拿過來使用。比如String a = null,List list = null;
(2) 沒有考慮是否為空白,直接擷取或者返回的對象為空白。直接使用該對象。 空問題:
空值一般是指對象的參數值為空白字串,比如,obj.value=”;而null一般是指對象為空白,即obj = null;
一個對象為null,肯定取不到它的所有參數值;若對象不為空白,取到它的某個參數的值也可能為空白的。
比如,
User user1 = null;user1.getId()=null//記錄不存在User user2 = new User();user2.getId()=''//記錄存在,但是值為空白
項目中的重用判斷:
(1)String
類型不為null和空
if (Utils.isEmpty(strParentId) { throw new Exception("參數不可為空。"); }
源碼:
public static boolean isEmpty(String value) { if (value == null || value.isEmpty()) { return true; } return false;} public boolean isEmpty() { return value.length == 0; }
(2)整型Integer
if (id == null) { throw new Exception("參數不可為空。"); }
這裡我就習慣用了“”.quals(id)去判空,被team笑了小半年。整型不需要”“.equal(id),整型是不可為空的。項目中使用了Integer類型,Integer是包括基本類型int的封裝類,不給賦值的時候為null。而int基本類型初始化是不為空白的。兩種情況加起來,integer只需要判斷null值就可以。
(3)list類型不為空白
if (CollectionUtils.isEmpty(list)) { throw new Exception("參數異常。");}
源碼:
public static boolean isEmpty(Collection<?> collection) { return (collection == null || collection.isEmpty()); } public boolean isEmpty() { return size() == 0; }
(3)map不為空白
if (CollectionUtils.isEmpty(existMap)) {}if (existMap.isEmpty()) { //這種也會報錯。}
推薦一篇文章:
http://blog.csdn.net/revivedsun/article/details/46581691