Java 它不能很好地克隆

Java 它不能很好地克隆,java,clone,shallow-copy,Java,Clone,Shallow Copy,我尝试使用“KUROONN”方法克隆Test2的对象。我期望输出的第二行读取[0,0],但实际结果显示[33,4]。我不知道为什么会这样,有人能解释一下吗 import java.util.ArrayList; class Test { public static ArrayList<Integer> T=new ArrayList<Integer>(); } class Test2 { int Test2Int; ArrayList<

我尝试使用“KUROONN”方法克隆Test2的对象。我期望输出的第二行读取[0,0],但实际结果显示[33,4]。我不知道为什么会这样,有人能解释一下吗

import java.util.ArrayList;

class Test {
    public static ArrayList<Integer> T=new ArrayList<Integer>(); 
}

class Test2 {
    int Test2Int;
    ArrayList<Integer> Test2List;
    public Test2(int K,ArrayList<Integer> A) {
        this.Test2Int=K;
        this.Test2List=A;
    }
    public Test2 KUROONN() { //broken clone
        Test2 b=new Test2(0,Test.T);
        b.Test2Int=this.Test2Int;
        System.out.println(b.Test2List);
        for(int i=0;i<this.Test2List.size();i++) {
            b.Test2List.add(this.Test2List.get(i));
        }
        return b;
    }

}

public class testtube001a {
    public static void main (String args[]){
        ArrayList<Integer> n =new ArrayList<Integer>();
        n.add(33);
        n.add(4);
        ArrayList<Integer> m =new ArrayList<Integer>();
        m.add(114);
        m.add(514);
        Test2 t2_1=new Test2(72,n);
        Test2 t2_2=new Test2(1919,m);
        t2_1.KUROONN();
        t2_2.KUROONN();
    }
}

您已将T字段声明为:

public static ArrayList<Integer> T=new ArrayList<Integer>(); 

执行时,它将创建引用该共享变量的Test2实例。第一次它将是空的,您的打印结果将是
[]
。第二次它将引用与第一次调用添加值33和4相同的列表,因此它将打印
[33,4]
。之后,值114和514也将添加到同一列表中。

为什么您希望输出[0,0]?在我看来,你从来没有这么做过。此外,请不要使用Test、Test2作为类名,然后将变量命名为Test2Int。即使代码相对简单,也很难理解。类测试中的ArrayList是静态的吗?因为如果不是的话,我会先把那东西拿走。对不起我的错误。我的意思是我期待[]。这段代码应该只是我正在编写的一个更大代码的调试测试,所以我只是用测试来命名。非常抱歉。哦,是的。。。我只是不明白“静态”是什么意思。
public static ArrayList<Integer> T=new ArrayList<Integer>(); 
Test2 b=new Test2(0,Test.T);