Hibernate 系列 08 - 对象识别机制
发布时间:2016-11-02 12:46:41 所属栏目:教程 来源:站长网
导读:副标题#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的身份,这就要根据实际的需求来决定了。
(编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 《Cook-Out:A Sandwich Tale》将登陆Oculus Rift和Oculus
- 百度VR免费技术服务+产品福利扶持,助力复工企业化解营销难
- 一文看懂:网址,URL,域名,IP地址,DNS,域名解析
- Apache Flink 漫谈系列 - JOIN 算子
- WiFi之父谈WiFi6:将改变物联网以及智能家居连接方式
- VIAVI亮相2019世界移动通信大会,展示面向5G的确认、验证及
- DTS音效大师如何分割音乐 切割音频文件就是这么容易
- 一年关掉4400个门店,预亏21亿,国产第一女装品牌瘦身求生
- ASLR如何保护Linux系统远离缓冲区溢出攻击? - 网络·安全技
- 小红书推广的优势 为什么我建议企业选择小红书推广
站长推荐
热点阅读