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