Java 它不能很好地克隆
我尝试使用“KUROONN”方法克隆Test2的对象。我期望输出的第二行读取[0,0],但实际结果显示[33,4]。我不知道为什么会这样,有人能解释一下吗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<
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);