这两天在研究集合类的效率问题的时候注意到了hash算法,当初理解的hashcode、equals、==这三个的区别,主要是为了面试,一开始看了很多资料,翻阅了java核心技术后,有一次加深了理解:
B a=new B("qq");
B b=new B("qq");
System.out.println( a==b );
System.out.println(a.equals(b));
System.out.println(a.hashCode()==b.hashCode());
B是我随便定义的一个类,这里打印结果是
false
false
false
理解起来也很简单,就是这里是实例话2个实例,所以第一个的引用地址值不相等,而B中没有override没有覆盖父类的equals和hashcode的方法,所以还是集成父类的方法,即object类,所以这里的equals和==的作用一样;对象不同,hashcode也不同。
String c=new String("1111");
String d=new String("1111");
System.out.println( e==d );
System.out.println(e.equals(c));
System.out.println(e.hashCode()==d.hashCode());
结果是:
false
true
true
new的实例不同,所以引用的地址值不同; 第二个true是因为Integer、String等的类型中重写equals方法,即这里不是用的是object类的equals方法,已经被重写了,如果是我们自己定义的类 ,当有可能被比较的时候要重写equals和hashcode方法; 第三个true和第二个是同的;
说了那么多需要记住的是面试要用的:
equals()相等的两个对象,hashcode()一般是相等的,最好在重写equals()方法时,重写hashcode()方法; equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。 反过来:hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。
开发中对基本类型和string的相等用==和equals就行了, 如果是对象用instanceof判断即可
hashcode主要是用在set集合中,为了加快判断存储的速度,就先判断hashcode是否等,不等对象就肯定不等,就可以存进去了 。避免了重复存储。
此处是我看的几个还行的blog:
http://hi.baidu.com/lywlx2013526/item/b670da1299fbce6871d5e82b
http://blog.csdn.net/songjie521/article/details/3368386
http://blog.163.com/lxy_rk/blog/static/8756380520090292924202/
http://zhidao.baidu.com/question/346261617.html
分享到:
相关推荐
"Java中equals、hashcode和==的区别" Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个...
hashcode、equals、==总结1简单总结.txt,他们之间的区别
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...
hashCode() 和 equals() 的本质区别和联系 Java 中的每个对象都有 hashCode() 和 equals() 方法,这两个方法的正确实现对于 Java 开发人员来说是非常重要的。本文将详细介绍 hashCode() 和 equals() 的本质区别和...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...
### hashCode和equals方法详解 #### 一、hashCode方法解析 在深入探讨`hashCode`方法之前,我们需要了解Java集合框架的基本概念。Java集合框架主要包括两大类集合:`List`和`Set`。 - **List**:这是一个有序集合...
### set接口中hashCode和equals方法详解 #### 一、引言 在Java编程语言中,`Set`接口作为集合框架的重要组成部分,在实现无重复元素的数据结构方面扮演着关键角色。为了确保元素的唯一性,`Set`接口依赖于对象的`...
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用以及equals()和==的区别,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,...
Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...
在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 或 `HashSet`)时。这两个方法来源于 `Object` 类,是所有Java类的基类,因此,每个自定义类...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...
### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。
在Java编程语言中,`hashCode()` 和 `equals()` 方法对于对象的比较和处理至关重要,尤其在集合类(如Set和Map)中。这两个方法都源自`java.lang.Object`类,因此所有的Java类都默认继承了它们。理解并正确地重写这...
equals 与 hashCode 方法讲解 equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java...
在Java编程中,`equals()` 和 `hashCode()` 方法是Object类中的两个重要方法,它们在处理对象相等性以及在哈希表(如HashSet、HashMap)中起到关键作用。当自定义类时,有时需要根据业务逻辑重写这两个方法以满足...
关于重写equals、hashcode以及compareTo方法! equals()方法是Object类中的一个方法,它用于比较两个对象是否相等。然而,它的默认实现是比较对象的引用(地址),而不是比较对象的实际内容。因此,在某些情况下,...
同时,别忘了在重写`equals()`时,也要重写`hashCode()`方法,以保持两者的一致性,这对于集合类(如HashSet、HashMap)的正常工作至关重要。 总的来说,`equals()`和`==`在Java中扮演着不同的角色。`==`关注对象的...