2012-09-26 17 views
0

當Java創建一個String對象,然後通過串聯Java:可以訪問從字符串連接創建的臨時對象嗎?

someString.concat("I am being concatenated to someString"); 

或諸如此類別的東西給它,因爲字符串是不可改變的,臨時的對象被創建一個包含生成的字符串,正確嗎? 通常情況下,這樣做時,一個新的String對象被創建馬上遏制它,像

String newString = oldString.concat("I am being concatenated"); 

但假設它不是。在那種情況下,是否會有另一種方式來訪問串聯的字符串? (在這最後一種情況下,oldString和「我正在連接」的總和)。

回答

0

Java中非原始類型的變量是引用,它們本身不是對象(如在C++中)。在這樣的線:

String newString = oldString.concat("I am being concatenated"); 

創建新對象String其中想象臨時串的內容被複制。實際上,newString就是指你認爲是臨時性的東西。 (這不是一個真正的臨時對象)。

2

concat確實會創建一個新的String對象(不確定臨時是什麼意思),並且如果不存儲該引用新的String在一個變量中,您以後無法訪問它。

在實踐中:

someString.concat("I am being concatenated to someString"); 

可能會在某個階段被淘汰的死代碼(當/如果代碼被由JIT編譯器編譯)。

3

我會說不,因爲你在堆空間中創建了一個新對象,但沒有引用它。所以它會被垃圾收集。在Java中沒有辦法直接訪問堆空間地址...

1

見接受的答案爲正確的,但一個瘋狂的答覆可能是......

someString.concat("I am being concatenated to someString").intern(); 
// later on later on in the code... 
String s = new String("I am being concatenated to someString").intern(); 
相關問題