Object的方法 equals()和hashCode() 是用来判断两个对象是否相等。基础类型判断是否相等时,使用“==”来判断,“==”当用来判断是基础类型是判断内容的,而引用对象是判断内存地址的。
首先equals()和hashcode()这两个方法都是从object类中继承过来的.在不重写的情况下以下条件成立:
1.equals()相等的两个对象,hashcode()一定相等;
2.equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。
public class Test {
public static void main(String[] args) throws Exception {
User user1=new User("abc",11);
User user2=new User("abc",11);;
System.out.println(user1.equals(user2));
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
}
}
class User{
private String userName;
private int userAge;
public User(String userName, int userAge) {
super();
this.userName = userName;
this.userAge = userAge;
}
@Override
public boolean equals(Object obj)
{
if(obj==this)
return true;
User user=(User)obj;
if(userName.equals(user.getUserName()) && userAge==user.getUserAge())
return true;
return false;
}
@Override
public String toString() {
// TODO Auto-generated method stub
//return super.toString();
return "user UserName:"+getUserName()+"UserAge:"+getUserAge();
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
}
结果为true
22068557
29115481
数据结构的课程大家都会知道有一种结构叫hashtable,目的是通过给每个对象分配一个唯一的索引来提高查询的效率。同样java中也继承了这一观点。而hashcode也就是“哈希码”的作用就是为支持数据结构中的哈希表结构而存在的,换句话说,也就是只有用到集合框架的 Hashtable、HashMap、HashSet的时候,才需要重载hashCode()方法。
如果上面的情况中重写equals方法了请注意重写hascode
分享到:
相关推荐
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别
Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)
解析Java对象的equals()和hashCode()的使用
Java equals 方法与hashcode 方法的深入解析.rar
如果一个类的hashCode()方法没有遵循上述要求,那么,当这个类的两个实例对象用equals()方法比较的结果相等时,他们本来应该无法被同时存储进set集合
主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1.概述 2.为什么重写equels方法要重写hashcode方法 3.例子
原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点我们一会再谈。 那么我们还是单独来看hashCode(),为什么HashMap需要用到...
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
本篇文章详细介绍了Java中的equals和hashCode方法详解,Object 类是所有类的父类,非常具有实用价值,需要的朋友可以参考下。
更清楚的了解hashcode()和equals()方法。
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,...
Java中的equals()和hashCode()契约Java开发Java经验技巧共3页.pdf.zip
java中hashcode和equals的详解.pdf
主要介绍了探索Java中的equals()和hashCode()方法的相关资料,需要的朋友可以参考下
关于hashCode()和equals()的本质区别和联系.doc