Hibernate 系列 08 - 对象识别机制
发布时间:2016-11-01 16:06:24 所属栏目:教程 来源:站长网
导读:副标题#e# Hibernate 系列 学习笔记 目录 为了区别不同的对象,有两种识别方法: 1. 内存地址识别(==号识别) 2. equals()和hashCode()识别 如果两个对象的内存地址相同,毫无疑问,它们是相同的。 如果要比较的是对象携带的信息,使用内存地址识别就不可
|
例如:若studentNo的类型是String,代码如下: 1 public class Student {
2
3 @Override
4 public boolean equals(Object obj) {
5 if (this == obj) return true; // 如果内存地址相等,返回true
6 if (this.studentNo == null || !(obj instanceof Student)) return false;
7 Student stu = (Student) obj;
8 return this.studentNo.equals(stu.studentNo);
9 }
10
11 @Override
12 public int hashCode() {
13 return this.studentNo.hashCode();
14 }
15
16 }
通过studentNo来比较对象是否相等存在一些问题。 因为当一个对象被new出来而还没有save()的时候,它并不会被赋予studentNo值,这是这个方法就不太适合了。 通常使用的方法是根据对象中真正包含的属性值来做比较,例如: 1 public class Student {
2
3 @Override
4 public boolean equals(Object obj) {
5 if (this == obj) return true; // 如果内存地址相等,返回true
6 if(!(obj instanceof Student)) return false;
7 Student stu = (Student)obj;
8 if(!getStudentName().equals(stu.getStudentName())) return false;
9 if(!getBornDate().equals(stu.getBornDate())) return false;
10 return true;
11 }
12
13 // 通过一个简单的算法得到哈希码
14 @Override
15 public int hashCode() {
16 int result;
17 result = getStudentName().hashCode();
18 result = 29*result+getBornDate().hashCode();
19 return result;
20 }
21
22 }
上述例子不再简单地比较studentNo值了,而是根据学生姓名和生日对Student对象实例进行比较。因为基本上名字和生日就能确定一个人的身份了。 当然,实现的方法还有很多,也可以使用其他的属性来比较Student的身份,这就要根据实际的需求来决定了。
(编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读


