对Java而言,要识别两个对象是否为同一个对象有两种方式
内存地址识别(“= =”号识别)
根据equals()、hasCode()中的定义
(默认Object类中定义的equals(Object o)方法也是按内存地址来比较的),源码如下:
public boolean equals(Object obj){
return (this==obj);
内存地址识别(“= =”号识别)
根据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;
}

本文探讨了Java中如何判断两个对象是否相同,介绍了使用内存地址识别和equals方法的区别,并通过示例代码展示了不同场景下的对象比较结果。同时,文章还提供了equals方法的重写示例。

997

被折叠的 条评论
为什么被折叠?



