2011-12-26 57 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