`

Object 的函数为什么要定义equals方法和hashCOde方法

 
阅读更多
覆盖hashcode类主要用要set集合里面..

在set集合中为了确保集合元素的唯一性,集合中没有重复的元素,插入的时候会用equals()方法按照内存地址来比较对象是否相等,当你的equals()方法没有被覆盖时,比较得出两个object地址为true,其哈希码一定也相同,

当你覆盖了equals()方法的,可能你比较出来的equals()结果是true,但两个object的在内存中存放地址不同,哈希码可能会不同,这就的话hashset这个就无法正常运行,所以为了保证HashSet正常工作,这时要同时覆盖HashCode()方法....


孙卫琴的精通 < <hibernate> > 里讲了的
在Object类中定义了hashCode()和equals()方法,Object类的equals()方法按照内存地址比较对象是否相等,因此如果 object1.equals(object2)为true,表明object1变量和object2变量实际上引用同一个对象,那么object1和 object2的哈希码肯定也相同,也就是说object1.hashCode()==object2.hashCode()

如果用户定义的类覆盖了Object类的equals()方法,但是没有覆盖Object类的hashCode()方法,就会导致当 object1.equals(object2)为true 时,而 object1 和 object2的哈希码不一定一样。

所以如果覆盖了equals()方法,也应该覆盖hashCode()方法,并且保证2个相等的object对象的哈希码也一样

代码:

ObjectChild覆盖Object类的equals()方法

public boolean equals(Object o){
if(this==0) return true;
if(! (o instanceof ObjectChild)) return false;
final ObjectChild other = (ObjectChild) o ;

if(this.name.equals(other.getName()) && this.age == other.getAge())
//这里假定的 ObjectChild 是一个JavaBean 对象,含有 name 和 age 2个属性,如果name和age相同,则看为同一个对象
return true;
else
return false;
}

ObjectChild覆盖Object类的hashCode()方法

//返回自定义方法计算出的hashCode值,使得拥有相同属性的对象拥有相同的hashCode;
public int hashCode(){
int result;
result = (name==null?0:name.hashCode());
result = 29*result + (age==null?0:age.hashCode());
return result;
}
分享到:
评论

相关推荐

    set接口经常用的hashCode和equals方法详解

    假设我们有一个自定义类`Person`,我们需要为其实现`hashCode`和`equals`方法: ```java public class Person { private String name; private int age; // 构造函数和其他方法省略... @Override public ...

    Java中的equals和hashCode方法详解1

    在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...

    重写equals方法

    第二种情况:对于采用哈希算法的集合,集合中对象必须重写 hashCode 方法,同时也要重写 equals 方法。这是因为哈希算法需要使用 hashCode 方法来计算对象的哈希值,而 equals 方法用于判断两个对象是否相等。 如何...

    解析Java对象的equals()和hashCode()的使用

    在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况下,这两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下,这两个...

    HashCode相同equals不同的2位字符集合算法

    在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    这就是为什么在重写 `equals()` 时,通常也需要重写 `hashCode()`。 来看看 `String` 的 `hashCode()` 源码: ```java public int hashCode() { int h = hash; if (h == 0 && value.length &gt; 0) { char val[] =...

    java中hashcode()和equals()的详解.docx

    - **一致性**:在覆盖`equals()`方法时,也需要确保同时覆盖`hashCode()`方法,并且两个方法的实现要保持一致,以避免潜在的哈希冲突问题。 - **性能考量**:在设计`hashCode()`方法时,应尽可能选择分布均匀的哈希...

    javahashcode()和equals()和==的介绍和区别.pdf

    在Java编程中,`hashCode()`、`equals()`以及`==`是三个经常被提及的概念,它们在处理对象的比较和存储时起着关键作用。本文将深入探讨这三个概念的介绍、区别以及它们在Java对象比较中的应用。 首先,`hashCode()`...

    java中equals()函数的用法 equals和==的区别

    同时,别忘了在重写`equals()`时,也要重写`hashCode()`方法,以保持两者的一致性,这对于集合类(如HashSet、HashMap)的正常工作至关重要。 总的来说,`equals()`和`==`在Java中扮演着不同的角色。`==`关注对象的...

    深入理解Java中HashCode方法

    在Java的所有类中,Object类是最顶层的父类,它定义了hashCode方法,该方法返回对象的hashCode值。hashCode方法的实现方式有多种,String类的hashCode方法就是一个典型的例子,它使用数学表达式s[0]*31^(n-1) + s[1]...

    Java 程序显示 equals() 方法的用法.docx

    这个方法在Java的Object类中定义,并且所有的Java类都默认继承了Object类,因此所有类的对象都可以使用`equals()`方法。`equals()`方法的初衷是检查两个对象的内容是否相等,而不仅仅是它们的引用是否相同。在Java...

    Java源码解析——看优秀源码最能使人进步

    Java.lang.String类是Java语言中的一种基本数据类型,该类的定义、字段属性、构造方法、equals方法、hashCode方法、charAt方法、compareTo方法、concat方法、indexOf方法、replace方法、split方法、substring方法、...

    收集的电子书

    包括ArrayList和LinkedList的数据结构特性、Object类的equals方法和hashCode()方法的特点、HashSet的使用原理、Map接口的使用方式、策略模式的概念以及TreeMap的使用和Comparator的定义。以下是对这些知识点的详细...

    JAVA_高级特性(hashCode,clone,比较器,Class反射,序列化)

    ### Java 高级特性详解 #### 一、`hashCode` ...正确地重写 `equals` 和 `hashCode` 方法、使用 `Comparator` 进行排序、利用反射机制和序列化技术,以及实现 `clone` 方法都是开发高质量 Java 应用程序的重要技能。

    java-object类

    2. **提供通用方法**:`Object` 类定义了一些非常重要的方法,如 `equals()`、`hashCode()` 和 `toString()`,这些方法在几乎所有 Java 类中都有应用。 3. **支持多态性**:通过继承 `Object` 类,Java 支持多态性,...

    char,string全部函数方法说明

    `equals(Object obj)`方法比较两个`Character`对象是否相等,而`hashCode()`返回对象的哈希码,这是Java中的基本比较和查找操作的基础。 `Character`类还提供了许多关于Unicode字符属性的方法,如`...

    浅谈Java中的hashcode方法(推荐)

    为了遵循`equals()`和`hashCode()`的约定,如果两个对象通过`equals()`判断为相等,那么它们的`hashCode()`方法必须返回相同的值。反之,如果`equals()`返回`false`,`hashCode()`可以返回相同的或不同的值。这有助...

Global site tag (gtag.js) - Google Analytics