List<String> list = new ArrayList<String>();
String string = null;
string = "123";
list.add(string);
string = "456";
list.add(string);
for (String s : list)
{
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
该计划输出:
123
456
Run Code Online (Sandbox Code Playgroud)
这很自然.
但是,我在想另一种方式."string"是实际String对象的引用(指针).执行add()时,它只存储引用.当"string"引用另一个String对象时,为什么列表仍保留原始列表?它是否在add()之前复制?
String变量的"值"是对作为字符串的(不可变)对象的引用.
所以没有String的副本,而是引用的副本.拥有此引用不允许您更改原始变量(您没有链接)并且不允许您更改字符串,因为它是不可变的.
在两次调用add之后,在这里,arrayList包含的数组中有两个不同的引用.它们可以指向相同的字符串,但更改一个引用不会更改另一个引用.如果你想在这种情况下改变第一个引用指向与第二个相同的字符串,那么最简单的就是做list.set(0, list.get(1));
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |