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");
}
내 기대는 그 결과가 이전과 이후 동일해야합니다입니다. 하지만 정적 변수 값을 기본값으로 초기화됩니다 직렬화 복원 과정에서 직렬화 규칙에 따르면
System.out.println(map.get(car2));
에 널
출력
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
을 얻고있다. 그것의 HashMap에서 Object를 찾을 수없는 이유보다 23으로 초기화한다면?
좀 더 읽을 수있는'if (car.getNumber(). equals (this.number))'를 사용할 수도 있습니다. IMHO – rthur
Perfect ......... – KSHiTiJ