java 空字符串與null區別
原文地址 http://liucun.iteye.com/blog/801691
" "分配了內存 ;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,因爲他們的內 容相同,都爲空。
" "分配了內存 ;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,因爲他們的內 容相同,都爲空。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.