内存地址识别(“= =”号识别)
根据equals()、hasCode()中的定义
(默认Object类中定义的equals(Object o)方法也是按内存地址来比较的),源码如下:
public boolean equals(Object obj){
return (this==obj);
}
1、创建了一个session
Session session = sessions.openSession();
Person p1 = (Person)session.get(Person.class,1);
Person p2 =(Person)session.get(Person.class,1);
session.close();
System.out.println(p1 = = p2);
上面这个程序片段将会显示true的结果,表示p1与p2是参考至同一对象
2、如果是以下的情况则会显示false:(创建了两个不同的session)
Session session1 = sessions.openSession();
Person p1 = (Person)session.get(Person.class,1);
session1.close();
Session session2 = sessions.openSession();
Person p2 = (Person)session.get(Person.class,1);
session2.close();
System.out.println(p1 == p2);
使用==来比较两个对象的记录是否代表数据库中的同一条记录是不可行的。如果您要有必要比较通过查询后两个对象的内容是否相同,必须重写 equals()与hashCode()。
/**
* 重写equals方法
*/
public boolean equals(Object obj){
if(obj instanceof Student){
return false;
}
final Student stu = (Student)obj;
if(this.id == stu.id &&
this.name.equals(stu.name) &&
this.age == stu.age){
return true;
}
return false;
}