2011-02-11 95 views
2

如果內存分配

String x = "abc"; 
String y = "abc"; 

什麼是X和Y的內存分配?

+1

你是什麼意思「什麼是內存分配」?另外,這功課呢?你一直在問一系列與iPhone有關的問題,所以看到一個Java問題突然變得非常令人驚訝。 – BoltClock 2011-02-11 17:17:22

+0

「內存分配」是什麼意思? – Argote 2011-02-11 17:17:44

+0

我認爲OP在詢問字符串「abc」是否會被攔截。 – Juliet 2011-02-11 17:18:15

回答

7

這兩個變量將分別佔用引用所需的空間。

兩個引用都具有相同的值 - 也就是說,他們會引用同一個對象 - 由於字符串文字的內聯。換句話說,只會有一個String對象。然而,很多時候你執行這段代碼(至少在同一個類加載器中),xy的值將始終指向相同的單個對象。

兩個變量仍是獨立的,當然 - 你可以改變一個,而不改變其他:

String x = "abc"; 
String y = "abc"; 
x = "def"; 
System.out.println(y); // Still prints abc 
1

只有一個字符串,它被放置在字符串文字池。不管你多少次運行這兩行,例如在一個循環中,不會分配更多的對象。

編輯:如果你想創建更多的對象,你可以做到這一點。

String x = new String("abc"); // don't do this 
String y = new String("xyz"); // don't do this either. 

這會每次創建一個對象,因爲您已經告訴它。 ;)

1

這是關於Java中字符串文字的nice reference。我猜你有興趣在此報價:

如果使用的是常量 表達式,一個字符串文字, 參考現有字符串,或通過 明確使用intern()創建具有相同數據 String對象方法, 他們的引用將是相同的。

0

String x =「abc」;它會創建一個字符串對象和一個引用變量。 「abc」將進入池中,x將引用它。