2012-03-30 65 views

回答

0
  1. 是的,你已經創建了一個新的字符串的obj
  2. 「你好」可能是在堆中,但它不是真正的堆。它不是在運行時創建/分配的,而是在程序啓動前進行實施。
  3. 是的,你在堆
4

String s = "hello"被分配string literal 「你好」 到s

使用new關鍵字,除了字符串文字外,還創建了一個新對象。

需要注意的是:

String s = "hello"; 
System.out.println(s == "hello"); 
s = new String("hello"); 
System.out.println(s == "hello"); 

將最有可能的產量

true 
false 

由於s被referncing字符串「你好」 - 你有在第一種情況下的身份,而在第二個它的一個新的對象,並沒有身份 - 這是兩個不同的對象,恰好包含相同的值。

關於你的數組問題:是的,一個int[]對象被創建。

+0

正如一個音符時,字符串文字是一個預先定義的字符串對象的源代碼的表示。因此,使用新的關鍵字,您實際上正在製作一個現有String對象的*副本。所以你最終得到了2個String對象而不是一個。 – 2012-03-30 16:14:54

+0

so String s =「hello」did not create a new object ??我認爲在java everthing是一個對象? – user1293258 2012-03-30 16:18:53

+0

@ user1293258:它是一個對象,它只是一個*字符串文字*。 jvm維護一個*字符串文字池,並重用相同的對象。所以,在assiment's =「hello」'和後來比較's'到''hello''時,使用了相同的字符串 - 這是同一個對象。關於:「我認爲在java中everthing是一個對象」 - 這不是事實。 'int','boolean' [和所有其他*原始類型*]都是** not **對象。 – amit 2012-03-30 16:22:42

0

創建一個int []關於字符串的構造函數,你必須始終對象。

當你說

String test = "test"; 

你創建的內容「測試」一個字符串對象,但是當你說

String test= new String("test"); 

你創建的內容「測試」一個String對象,並把它作爲參數字符串 構造函數創建一個新的String對象。所以最後你有 創建了2個字符串對象。

構造函數的代碼是:

public String(String original){.....} 

字符串構造是考慮大多數情況下沒用。

在該螺紋他們描述了當它可以用來

Use of the String(String) constructor in Java