我刚刚学习了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));
打印出来&#34;你好&#34;。所以它确实克隆。然后我记得从个人经验来看,当我添加我写入数组的对象时,它并没有克隆。当我更改数组中的那个时,原始也会发生变化。
我搜索谷歌,不确定,因为我缺乏搜索技能,我没有找到我想要的答案。然后我搜索了StackOverFlow,再次找不到我想要的东西。
那么ArrayList的处理是什么?如果这个问题重复,我很抱歉,我真的在搜索。
有些人不明白这个问题: ArrayList是否会克隆? (这是我正在寻找答案的主要问题)如果不是这样,为什么String会被克隆?
答案 0 :(得分:1)
您可以修改数组中的对象,如果对象是可变的,则更改将保留。 字符串是不可改变的,你无法改变它,每次你对String做任何函数/动作时,它都会返回一个带有结果的新String对象。
ArrayList不会克隆对象,它只是一个对象数组,如果它们是可变的,你可以获取并修改它们。
如果需要可变字符串,可以使用StringBuilder对象:
StringBuilder string = new StringBuilder("Hi!");
string.append(" - concat new String");
System.out.println(string.toString());
答案 1 :(得分:0)
您可以通过检查列表identityHashCode来验证操纵列表内容是否无法克隆。它将保持不变。