是否将对象添加到ArrayList克隆?

时间:2016-01-26 14:54:03

标签: 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));

打印出来&#34;你好&#34;。所以它确实克隆。然后我记得从个人经验来看,当我添加我写入数组的对象时,它并没有克隆。当我更改数组中的那个时,原始也会发生变化。

我搜索谷歌,不确定,因为我缺乏搜索技能,我没有找到我想要的答案。然后我搜索了StackOverFlow,再次找不到我想要的东西。

那么ArrayList的处理是什么?如果这个问题重复,我很抱歉,我真的在搜索。

有些人不明白这个问题: ArrayList是否会克隆? (这是我正在寻找答案的主要问题)如果不是这样,为什么String会被克隆?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

您可以通过检查列表identityHashCode来验证操纵列表内容是否无法克隆。它将保持不变。