字符串null 與"" 的區別

 一、類型

 null表示的是一個對象的值,而並不是一個字符串。例如聲明一個對象的引用,String a = null ;
 ""表示的是一個空字符串,也就是說它的長度爲0。例如聲明一個字符串String str = "";

二、內存分配

      Stringstr = null ; 表示聲明一個字符串對象的引用,但指向爲null,也就是說還沒有指向任何的內存空間;
 String str ="";   表示聲明一個字符串類型的引用,其值爲""空字符串,這個str引用指向的是空字符串的內存空間;

  ""分配了內存,null沒有,調用null的字符串的方法會拋空指針異常(NullPointerException)。 
  ""是一個字符串(String),它在內存中是存在的,它可以使用Object對象中的方法(如"".toString();"".equals())而null它是一個空對象,在內存中是不存在的,它不可以使用Object對象中的方法。


 ""佔內存,在內存中會分配一個空間。
  null不佔內存,爲空引用。

 

 在Java中變量和引用變量是存在棧中(stack),而對象(new產生的)都是存放在堆中(heap):

 就如下:

 String str = new String("abc") ;

 ps:=左邊的是存放在棧中(stack),=右邊是存放在堆中(heap)。

三、"=="與".equal()"區別

    "=="對兩個字符串作比較時,比較的是內存地址是否相等。

  ".equal()"是對兩個字符串對象的內容作比較,與地址無關。

比如以下代碼:

publicclass String_Demo {

   
    publicstatic void main(String[] args){        
       String str1 = new String() ;
       String str2 = null ;
       String str3 = "" ;
       System.out.println(str1==str2);               //內存地址的比較,返回false
       System.out.println(str1.equals(str2));        //值的比較,返回false
       System.out.println(str2==str3);               //內存地址的比較,返回false
       System.out.println(str3.equals(str2));        //值的比較,返回false
       System.out.println(str1==str3);               //內存地址的比較,返回false
       System.out.println(str1.equals(str3));        //值的比較,返回true
    }

}

綜上,

  • 字符串對象與null的值不相等,且內存地址也不相等;
  • 空字符串對象與null的值不相等,且內存地址也不相等;
  • 創建一個字符串對象的默認值爲""
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章