1. 程式人生 > >字串為null和字串為" "有什麼區別

字串為null和字串為" "有什麼區別

做成員變數(欄位/屬性/類變數)時,如果只寫String str;那麼是預設賦值為null的。
做區域性變數(方法裡的變數)時,如果只寫String str;是不會預設賦值null的,這裡僅聲明瞭一個str變數,在棧記憶體中有定義,但沒有任何值,null其實也是一種值。此時任何呼叫str的操作,編譯時就均會報錯,是error,不是異常。null的話,你螢幕輸出(toString方法)的結果為字串null,但其它呼叫str的操作,編譯可通過,執行時會空指標異常,此時是異常。
String str = " "; // 這個跟"abc"、"中國",本質上這都一樣,只是空串,長度為0罷了
" "是空字串,但是也是字串,沒有什麼東西。


而null是空的意思,什麼都沒有,沒有地址。

  1. String str1 = null;  
  2. String str2 = "test";  
  3. str1 = str1 + str2;  
  4. System.out.println(str1);  

輸出結果:nulltest        這裡它把null解析為字串了。

原因:我們在進行字元連線操作時會預設去呼叫String的valueOf()方法。

public static String valueOf(Object obj)

返回 Object 引數的字串表示形式。

引數: obj - 一個 Object

返回: 

如果引數為 null,則字串等於 "null";否則,返回 obj.toString() 的值。

 

TextUtils.isEmpty(str)和str.isEmpty()

public static boolean

 isEmpty(CharSequence str)

{ if (str == null || str.length() == 0) return true; else return false; } //CharSequence是一個介面,String實現了這個介面 

//我們可以用TextUtils.isEmpty(str)來代替if(text == null || text.length() == 0)

str.isEmpty();則相當於只判斷了str.length == 0。而當空(null)時 str.isEmpty() 會空指標異常。