java - 它会在将字符串添加到集合之前制作副本吗?

标签 java

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

这个程序输出:

123
456

这很自然。

不过,我换个角度想。 “字符串”是对实际字符串对象的引用(指针)。执行 add() 时,它只存储引用。当“string”引用另一个String对象时,为什么列表中还保留着原来的那个?它会在 add() 之前制作副本吗?

最佳答案

字符串变量的“值”是对作为字符串的(不可变)对象的引用。

所以没有字符串的副本,而是引用的副本。拥有此引用不允许您更改原始变量(您没有指向它的链接)并且不允许您更改字符串,因为它是不可变的。

在两次调用 add 之后,在 arrayList 包含的数组中,您所拥有的是两个不同的引用。它们可以指向相同的字符串,但更改一个引用不会更改另一个。如果您想在这种情况下更改第一个引用以指向与第二个引用相同的字符串,最简单的方法就是执行 list.set(0, list.get(1));

关于java - 它会在将字符串添加到集合之前制作副本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13605317/

相关文章:

java - 增强for循环中的循环变量

使用 Maven 依赖项时出现 java.lang.ClassNotFoundException : oracle. jdbc.OracleDriver

java - Java中函数返回的写法

java - 从 Java 类访问 Config.groovy

java - 如何将 Treemap 写为 csv

java - Eclipse 中的 SonarQube 插件未显示在首选项中

java - 查询 MongoDB/Morphia 中的特定子文档

java - 迭代时检查List中是否还有剩余项

java - twilio 的 Whatsapp 群组

java - java中的.properties文件