引用ArrayList的元素

时间:2011-12-26 18:19:51

标签: java 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);

有什么建议吗?

2 个答案:

答案 0 :(得分: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中的 - 它仍然只是一个引用 - 但您正在更改值引用的对象中的数据。< / p>

答案 1 :(得分:2)

你可能正在寻找的是一个可变的字符串,它不附带Java AFAIK,你必须创建一个包装类

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}
}

然后你可以拥有一个MuttableString(而不是String)的ArrayList,并存储对列表中特定元素的引用(并且能够更改它们)。当然,您将无法使用(或覆盖)默认运算符,因为它们只能使用String(所以没有+ =)。

您可能还想使用StringBuilder而不是String,但这不是它的用途。

希望有所帮助