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中,並指向其分配的記憶體空間。