2013-10-24 42 views
0

簡單代碼:爲什麼人們使用新的字符串而不是特定的值?

class MyClass<T> 
{ 

private T t; 

    public void add(T t) 
    { 
     this.t = t; 
    } 

    public T get() 
    { 
    return t; 
    } 
} 

然後:

​​

我看到人們使用StringClass.add(new String("This is string")),而不是簡單的版本StringClass.add("This is string")。有什麼不同?

Integers同樣的故事。

+1

另請注意,java命名約定規定變量名稱應以小寫字符開頭。 –

+0

但是這個代碼在兩個版本中都起作用。結果是一樣的。那有什麼區別? – Ernusc

+0

閱讀重複的問題 –

回答

1


String foo = "bar"

String foo = new String("bar")

之間的區別在於,第一個不創建一個新的String對象,而是,它在現有的String值將查找值你已經創建。這被稱爲實習價值。這節省了內存。

關鍵字new爲您創建的String對象分配了新的內存。

public class StringInternExample { 
    public static void main(String[] args) { 
     String foo1 = "bar"; 
     String foo2 = "bar"; 

     String foo3 = new String("Hello, Kitty"); 
     String foo4 = new String("Hello, Kitty"); 

     if(foo1 == foo2){ // compare addresses. Same address = no new memory assigned 
      System.out.println("No new memory has been assigned for foo2"); 
     } 

     if(!(foo3 == foo4)){ // compare addresses. Different addresses = new memory 
      System.out.println("New Memory has been assigned for foo4"); 
     } 

    } 
} 
+1

這兩種方法的主要區別在於前者試圖重新使用字符串池中的現有字符串,而後者明確地創建一個新字符串。 –

+1

他們不一樣。 –

+0

絕對不一樣。 –

相關問題