2011-12-26 56 views
2

我嘗試獲取對ArrayList元素的引用,但是失敗。引用ArrayList的元素

ArrayList<String> test = new ArrayList<String>(); 

test.add("zero"); 
test.add("one"); 
test.add("two"); 

String s1 = test.get(1); 
String s2 = test.get(1); 

System.out.println(test.get(1) +" " + s1 + " " + s2); 

s1 += " modificated"; 

System.out.println(test.get(1) +" " + s1 + " " + s2); 

有什麼建議嗎?

+0

Java引用就像一個C指針。如果您更改引用的值,則只需將其指向其他位置即可。 – 2011-12-26 18:24:55

回答

5

你不能用Java做到這一點。你所要做的就是從ArrayList獲取。該值是一個參考,但它是Java術語中的一個參考,與C++不太一樣。

該參考值被複制到s1,此後完全獨立於ArrayList中的值。當您更改的s1值是指一個新字符串,這條線:

s1 += "modificated"; 

不改變在ArrayList在所有的價值。

現在,如果你使用的是可變類型,例如StringBuilder,你可以使用:

StringBuilder builder = list.get(0); 
builder.append("more text"); 
System.out.println(list.get(0)); // Would include "more text" 

在這裏,我們不是在ArrayList改變 - 這仍然只是一個參考 - 但你'改變數值所指向的對象內的數據。

+0

謝謝!我明白! – 2011-12-26 20:23:34

2

什麼你可能尋找的是一個可變的字符串,它不來與Java據我所知,你必須創建一個包裝類

class MutableString { 
    private String value; 
    public void setValue(String val){value = val;} 
    public String getValue(){return value;} 
    public String append(String val){value+=val;//Or use a StringBuilder} 
} 

然後你就可以有MutableString的ArrayList(而不是的字符串),並存儲對列表中特定元素的引用(並且能夠更改它們)。當然,你將不能使用(或覆蓋)默認的操作符,因爲它們只能使用String(所以不加+)。

您可能還想使用StringBuilder而不是String,但這不是它的目的。

希望它有幫助

+0

你說得對。解決方案是這樣的:) – 2011-12-26 20:26:06

+0

謝謝!請將其投票或標記爲正確答案:) – Slash 2011-12-28 14:11:15