(原)String類兩種實例化的區別


String有兩種實例化方式,一種是通過直接賦值的方式,另外一種是使用標准的new調用構造方法完成實例化。

 

 1 public  class StringDemo
 2 {
 3     public static void main(String[] args)
 4     {
 5         String str1="hello";
 6         String str2="hello";
 7         String str3="hello";
 8         
 9         System.out.println(str1==str2);
10         System.out.println(str1==str3);
11         System.out.println(str2==str3);
12     }
13 }

 

上述結果說明,使用String直接賦值后,只要是以后聲明的字符串內容相同,則不會再開辟新的內存空間。對於String的以上操作,在java中稱為共享設計,這種設計思路是,在java中形成一個對象池,在這個對象池中保存多個對象,新實例化的對象如果已經在

池中定義了,則不再重新定義,而從池中直接取出繼續使用。String就是因為采用了這樣的設計,所以當內容重復時,會將對象指向已存在的實例空間。

 

 1 public  class StringDemo
 2 {
 3     public static void main(String[] args)
 4     {
 5         String str1=new String("hello");
 6         String str2=new String("hello");
 7         String str3=new String("hello");
 8         
 9         System.out.println(str1==str2);
10         System.out.println(str1==str3);
11         System.out.println(str2==str3);
12     }
13 }

 

一個字符串就是一個String類的匿名對象,而如果使用new關鍵字,不管如何都會再開辟一個新的空間,但是此時,此空間的內容還是hello.所以上述代碼實際上是開辟了三個內存空間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM