保存されたシリアル化されたオブジェクトをデータ ファイルからロードするときの変数の参照に問題があります。同じオブジェクトを参照するすべての変数は、変更時に更新されないようです。問題を説明するコードを以下に抜粋しました。
Tournament test1 = new Tournament();
Tournament test2 = test1;
try {
FileInputStream fis = new FileInputStream("test.out");
ObjectInputStream in = new ObjectInputStream(fis);
test1 = (Tournament) in.readObject();
in.close();
}
catch (IOException ex){
Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
}
catch (ClassNotFoundException ex){
Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("test1: " + test1);
System.out.println("test2: " + test2);
このコードを実行すると、test1 と test2 は同じオブジェクトを参照しなくなります。私の知る限りでは、test2 の宣言で test1 への参照になるため、そうするべきです。test1 が更新されると、test2 は変更を反映し、コードで呼び出されたときに新しいオブジェクトを返す必要があります。ここで重要な何かが欠けているのでしょうか、それとも Java の変数参照がどのように機能するかについて誤解されているのでしょうか?