0
我有用於測試一個靜態成員序列化的代碼。使用HashCode方法進行序列化
這裏是汽車類
public class Car implements Serializable {
private String number;
private String color;
private String model;
static int y = 23;
public boolean equals(Object object)
{
System.out.println("Equals Called...");
if(object instanceof Car)
{
Car car = (Car) object;
if(car.getNumber() == this.number)
{
return true;
}
}
return false;
}
public String toString()
{
System.out.println("ToString Called...");
return "Number : "+this.number+" Color : "+this.color+" Model : "+this.model+" Y : "+this.y;
}
public int hashCode()
{
return this.y * 23;
}
Getters And Setters
}
,這裏是我的主類
public static void main(String args[])
{
Car car1 = new Car();
car1.setColor("red");
car1.setModel("23023");
car1.setNumber("1212");
System.out.println(car1.toString());
Car car2 = new Car();
car2.setColor("red");
car2.setModel("23023");
car2.setNumber("1212");
System.out.println(car2.toString());
Map<Car, String> map = new HashMap<Car, String>();
map.put(car1, "Kshitij_1");
System.out.println("Map : "+map.toString());
System.out.println(map.get(car2));
System.out.println(car2.getY());
System.out.println("---------------------------------------------Before");
try
{
FileOutputStream fout = new FileOutputStream("D://map.ser");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fout);
objectOutputStream.writeObject(map);
objectOutputStream.close();
FileInputStream fin = new FileInputStream("D://map.ser");
ObjectInputStream inputStream = new ObjectInputStream(fin);
map = (Map<Car, String>) inputStream.readObject();
inputStream.close();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("Map : "+map.toString());
System.out.println(map.get(car2));
System.out.println(car2.getY());
System.out.println("---------------------------------------------After");
}
我希望的是結果應該是相同的之前和之後。但我正在逐漸空
輸出
ToString Called...
Map : {Number : 1212 Color : red Model : 23023 Y : 23=Kshitij_1}
Equals Called...
Kshitij_1
23
---------------------------------------------Before
ToString Called...
Map : {Number : 1212 Color : red Model : 23023 Y : 23=Kshitij_1}
Equals Called...
null
23
---------------------------------------------After
在
System.out.println(map.get(car2));
按照系列化規則在反序列化過程中的靜態變量將被初始化爲默認值。如果它初始化爲23而不是爲什麼它無法從HashMap中找到對象?
你也可以使用'if(car.getNumber()。equals(this.number))'這是一個更可讀的恕我直言 – rthur 2014-08-27 12:50:27
完美......... – KSHiTiJ 2014-08-27 12:59:04