1. 程式人生 > >Java 空格“ ”、空字串“”和null區別

Java 空格“ ”、空字串“”和null區別

空格“ ”

空字串“”

1、型別:“”是一個空字串(String),長度為0,佔記憶體在記憶體中分配一個空間,可以使用Object物件中的方法。(例如:“”.toString()等)

2、記憶體分配:表示宣告一個字串型別的引用,其值為“”空字串,這個引用指向str1的記憶體空間。

null

1、型別:null是空引用,表示一個物件的值,沒有分配記憶體,呼叫null的字串的方法會丟擲空指標異常。(例如:str1.endsWith(str2); java.lang.NullPointerException)

2、記憶體分配:表示宣告一個字串物件的引用,但指向null,也就是說沒有指向任何記憶體空間。

例: String str1 = ""; //str1對應一個空串,宣告物件的引用
String str2 = null; //str2引用為空

String str3 = new String(); //str3將指向具體的String例項,預設值為“”

注意:str1和str3被例項化,而str2沒有例項化,但str1和str3所指的地址不同,但值一樣,都為空。

 

null不是物件(空引用),“”是物件,故比較的時候應該是if(str1.equals(""))和if(str2 == null),也即物件用equals()比較,null用等號比較。正確的寫法是先判斷是不是物件,如果是,再判斷是不是空字串。

 

補充說明:1、Java中類的物件都是用控制代碼來訪問的, 類似於C中的指標。

2、Java中有兩個判斷相等的方法:“==”和equals()方法,前者是根據地址來比較,只有地址和值都相等,這兩個變數(引用型別)才相等;後者比較的是變數的值,只要值相等,兩者就相等。

3、在Java中變數和引用變數是存在棧中(stack),而物件(new出來的)都是存放在堆中(heap)。

例如:String str = new String("abc");//str存放在stack中,abc這個值存放在heap中,並指向其分配的記憶體空間。