測者的測試技術手冊:Java中的null型別是測試不可超越的鴻溝
null是一個非常非常特殊的型別,對於每一個測試人員都要十分小心null的存在的可能性。同時null也讓很多RD頭疼,甚至連Java的設計者都成人null是一個設計失誤。這篇文章,測者想聊聊這個讓很多人不喜歡的null。
null 到底是怎樣的存在
在Java中有基本型別和引用型別,但是null卻不屬於上述兩種,我們即不能宣告一個變數為null型別,也不能將變數轉換為null。null的引用是唯一一種null正確的表達方式。但是null卻可以轉換成任何一種引用型別。
-
public class MrTesterTestClass{
-
-
Integer int1 = null;
-
String str1 = null;
-
Integer int2 = (Integer) null;
-
String str2 = (String) null;
-
-
}
上面的程式碼在編譯其中並不會報錯。但是如果我們使用:
-
int int3 = null
那麼就出出現問題。
null的一些細節注意點
null的裝箱拆箱的細節
先說一個Java的概念:裝箱和拆箱
-
Integer count =100;裝箱
-
-
int sum =count;拆箱
上面的程式碼清洗的解釋了裝箱和拆箱的過程,裝箱就是自動將基本資料型別轉換為包裝器型別;拆箱就是自動將包裝器型別轉換為基本資料型別。
但是如果任何一個包裝器型別在拆箱的時候都會包NPE異常(空指標異常)。
布林運算
null很特別,但是可以而且僅可以做布林運算。
null==null的結果是true,但是這裡面特別注意:如果是兩個null的引用變數那麼首先要保證兩個引入變數的型別完全一致。運算結果才會是true。
String型別轉換
-
public static void main(String[] args){
-
-
String str = null;
-
-
str= str+"ss";
-
-
System.out.println(str);
-
}
上面的程式碼的輸出:nulss。String轉換後的null可以進行字串運算,這是因為字串進行連線的時候,編譯器對null進行了特別的優化。
null 不等於“”
null和“”不相等,這是因為“”會在內容中有一個