2つのオブジェクトを比較するプログラムを作成しようとしました。同じオブジェクトのインスタンスを2つ作成すると、2つのオブジェクトは異なるものになります。なぜなら、同じ「スズ」を持っていても、2つのオブジェクトですからです。シリアル化されたオブジェクトが元のオブジェクトと異なるのはなぜですか?
私の場合、オブジェクトを作成し、それをシリアル化し、2番目のインスタンスに逆シリアル化してコピーと比較します。
なぜ異なるのですか?私は2番目のインスタンスを作成するために "new"を使用することさえしません。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Main {
public static void main(String[] args) {
File file = new File("something.serial");
//Creation of the 1st object
Something obj1 = new Something();
//Serialization
ObjectOutputStream oos;
try {
oos= new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)));
oos.writeObject(obj1);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
//Second object
Something obj2=null;
//Deserialization
ObjectInputStream ois;
try {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(file));
ois = new ObjectInputStream(bis);
obj2=(Something)ois.readObject();
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//Compare
if (obj1.equals(obj2)) {
System.out.println("Same");
} else {
System.out.println("Different : ");
System.out.println(obj1.toString()+" - "+obj2.toString());
}
}
}
と::私はちょうどここに は、私が使用して2つのクラスがある...シリアル化されたオブジェクトを読み取る
import java.io.Serializable;
public class Something implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public int value = 2;
Something() {
}
}
私が理解するのに役立ちますすべてのあなたの答えをいただき、ありがとうございます。
Somethingクラスにequalsメソッドを実装するにはどうすればよいですか?それをオーバーライドしないと、オブジェクトを正しく明示的に比較することはなく、equalsはfalseを返します。 – xander
あなたの問題は、あなたが** equals()**が本当に何をしているのか分からないことです。したがって、それについて学ぶ。独自のequals()メソッドを実装します。 – GhostCat