天天看點

java 空字元串與null差別

轉自:

" "配置設定了記憶體

;null沒有 

調用null的字元串的方法會抛空指針異常。 

""是一個字元串(String).它在記憶體中是存在的.它可以使用Object對象中的方法(如"".toString();"".equals()) 

而null它是一個空對象.在記憶體中是不存在的.它不可以使用Object對象中的方法 

""占記憶體..

在記憶體中會配置設定一個空間. 

null不占記憶體.

為空引用. 

String str1 = null;

str引用為空 

String str2 = "";

str應用一個空串 

也就是null沒有配置設定空間,""配置設定了空間,是以str1還不是一個執行個體化的對象,兒str2已經執行個體化。 

注意因為null不是對象,""是對象。是以比較的時候必須是

if(str1==null){....}和if(str2.equals("")){} 

對象用equals比較,null用等号比較。是以,如果str1=null;下面的寫法錯誤: 

if(str1.equals("")||str1==null){//如果str1沒有值,則.... 

//。。。。 

正确的寫法是

if(str1==null||str1.equals("")){

//先判斷是不是對象,如果是,再判斷是不是空字元串 

//... 

補充: 

Java裡面,類的對象都是用句柄來通路的,就像C裡面的指針。 

而在Java裡面有兩個比較相等的方法一個是用“==”,另一個是String

裡面的equals()方法,兩個的差別是,前者比較的是位址,後者比較的

是内容。 

例如你寫了這樣的一個語句 

String

str1,str2; 

那就是定義了兩個指向不同String執行個體的句柄,現在他們都是指向null

的是以str1==str2==null,此時你不能用length()方法,因為,他們

都沒有指向具體的對象,如果調用這個方法的話,會傳回一個 NullPointerException。 之後,如果你寫了這樣的語句

str1=new String(); 那麼str1将指向一個具體的String執行個體,是以str1!=str2,str1!=null,

而且更重要的是str1!="",因為""與str1所指的是兩個不同的位址。

但方法str1.length()的傳回值就是0了,也就是字元串為空。

同樣即使你再這樣寫 

str2=new String();

這個時候依然是str1!=str2,因為他們指向的是兩個不同的位址,

但如果你用str1.equals(str2)的話,傳回值就是true,因為他們的内 容相同,都為空。