ArrayList的clone方法是浅表复制,clone的结果却是复制了对象?

来源:百度知道 编辑:UC知道 时间:2024/05/10 15:03:54
这段代码,明显是clone了对象,那么api文档中说浅表复制是不是矛盾了呢?
public class A {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("1");
al.add("2");
ArrayList al1 = new ArrayList();
al1 = (ArrayList)al.clone();

al1.add("a");
for(Iterator it = al1.iterator(); it.hasNext();) {
System.out.println("al1: " + it.next());
}

for(Iterator it = al.iterator(); it.hasNext();) {
System.out.println("al: " + it.next());
}
}
}
各位高手,请问一下: 对于daay1986写的代码,我知道arraylist添加的是引用,两个arraylist有相同引用,所以test都会改变。 我的题目原意是,clone方法有没有创建了两个不同的arraylist对象。

class A {

public static void main(String[] args) {
test test1 = new test(1);
test test2 = new test(2);
test test3 = new test(3);
ArrayList al = new ArrayList();
al.add(test1);
al.add(test2);
ArrayList al1 = new ArrayList();
al1 = (ArrayList) al.clone();

al1.add(test3);
for (Iterator it = al1.iterator(); it.hasNext();) {
System.out.println("al1: " + it.next());
}

for (Iterator it = al.iterator(); it.hasNext();) {
System.out.println("al: " + it.next());
}
test1.num = -1;
test2.num = -1;
test3.num = 2;
for (Iterator it = al1.iterator(); it.hasNext();) {
System.out.println("al1: " + it.next());
}

for (Iterator it = al.iterator(); it.hasNext();) {