1. 程式人生 > >關於 new String("xyz")建立幾個物件的理解

關於 new String("xyz")建立幾個物件的理解

 

我們先看一個最簡單的程式

  1. publicclass T {  
  2.   private String str = "###########JAVA2000#####################";  
  3.   publicvoid test() {  
  4.     String s = "@@@@@@@@@@[email protected]@@@@@@@@@@@@";  
  5.     String ss = "###########JAVA2000#####################"// 特意和str相同
  6.   }  
  7. }  
public class T {
  private String str = "###########JAVA2000#####################";

  public void test() {
    String s = "@@@@@@@@@@
[email protected]
@@@@@@@@@@@@"; String ss = "###########JAVA2000#####################"; // 特意和str相同 } }

我們來看一下這個類到底生成了什麼,我們開啟T.class

裡面已經存在了我們用到的2個字串,注意是2個,那個重複的並沒有出現2次。

結論:

  1. 這種字串是在編譯期間就生成了,可以理解為類載入時,已經在記憶體裡存在了,不再需要new
  2. 所以 new String("XYZ") 中的 "XYZ" 是在載入時存在的,系統以此為模板,重新分配記憶體空間,建立了一個新的物件
  3. 至於String str = new String("XYZ"); 裡面的 str 只能算一個引用,一個變數而已,所以單單看這個動作,只建立了一個物件。因為這語句執行前,那個"XYZ"已經存在了。不能計算為這個語句引起的。

總之,這個面試題主要看題目的理解,有些概念很難澄清,雖然大家都知道,但說法不同