「クーロン」メソッドを使ってTest2のオブジェクトをクローンしました。私は出力の2行目が[0,0]を読むと予想しましたが、実際の結果は[33,4]と表示されます。なぜこのようなことが起こるのかわからないので、誰もがこれを説明できますか?JAVAはうまくクローンしません
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();
}
}
プログラムの出力は次のようになります。
public static ArrayList<Integer> T=new ArrayList<Integer>();
言葉static
は、変数はすべてのインスタンス間で共有されることを意味:
[]
[33, 4]
出力[0,0]はなぜ期待しますか?あなたは私が見る限りそれを決して決して決してしません。また、Test、Test2をクラス名として使用しないで、Test2Int変数に名前を付けてください。コードは比較的単純ですが、理解するのはかなり難しいです。そして、特定の理由でTestクラスのstaticのArrayListは静的ですか?もしそうでなければ、私はそのことをまず取り除くでしょう。 –
私の間違い申し訳ありません。私は期待したことを意味した[]。そして、このコードは私が作っているより大きいコードのためのちょうどデバッグテストであると考えられていたので、私はちょうど名前のテストを使いました。本当にごめんなさい。 –