java - 向 ArrayList 克隆添加对象吗?

标签 java arraylist reference clone

我最近刚刚学习了 Java 克隆。有深克隆和浅克隆之分。我想知道当对象添加到 ArrayList 时它会做什么。它克隆吗?

我用 String 对象做了一些测试。

String s = new String("hello");
ArrayList<String> list = new ArrayList<String>();
list.add(s);
s = s.replace('h','y');
System.out.prinln(list.get(0));

它打印出“你好”。克隆也是如此。然后我记得根据个人经验,当我将我写入的对象添加到数组中时,它不会克隆。当我改变数组中的一个时,原来的也会改变。

我搜索了谷歌,不确定,因为我缺乏搜索技巧,我没有找到我正在寻找的答案。然后我搜索了 StackOverFlow,同样没有找到我想要的东西。

那么 ArrayList 是怎么回事呢?如果这个问题重复,我很抱歉,我真的搜索过。

有人不明白这个问题:ArrayList是克隆的吗? (这是我正在寻找答案的主要问题)如果不是的话,为什么字符串会被克隆?

最佳答案

您可以修改数组内的对象,如果对象是可变的,则更改将保留。 字符串是不可变的并且您无法更改它,每次您对字符串执行任何函数/操作时,它都会返回一个带有结果的新字符串对象。

ArrayList 不会克隆对象,它只是一个对象数组,如果它们是可变的,您可以获取和修改它们。

如果您需要可变字符串,可以使用 StringBuilder 对象:

StringBuilder string = new StringBuilder("Hi!");
string.append(" - concat new String");
System.out.println(string.toString());

关于java - 向 ArrayList 克隆添加对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016772/

相关文章:

java - 如何更改 Fortify SCA 中的 Java 版本

java - NoClassDefFoundError : android. support.v4.util.ArrayMap

c# - 如何枚举给定根对象的所有可到达对象?

java - Glassfish 不独立于 Netbeans 运行 Web 应用程序

java - jar 中提供什么格式的大背景图像?

java - ArrayList 中的类型不匹配与多态性

java - Arraylist 搜索和显示对象方法混淆

java - 使用扫描仪读取文件时出现异常

Perl Hash 引用

c# - 为什么此处需要引用未使用的程序集