我尝试获取对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 :(得分: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,但这不是它的用途。
希望有所帮助