`
wzdoxu
  • 浏览: 94644 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

只要覆盖equals()方法,就应该覆盖hasCode()方法

阅读更多
覆盖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的哈希码不一定一样。www.Phontol.com
所以如果覆盖了equals()方法,也应该覆盖hashCode()方法,并且保证2个相等的object对象的哈希码也一样

代码:

http://cs.phontol.com/20081017_330473.html
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;
}
分享到:
评论

相关推荐

    重写equals方法

    "equals 方法重写详解" 在 Java 中,equals 方法是一个非常重要的方法,它用于判断两个对象是否相等,而不是判断两个对象的引用是否相同。在 Object 基类中,equals 方法的实现是使用“==”操作符来比较对象的引用...

    java中hashcode()和equals()方法详解

    - **一致性**: 只要用于比较的信息没有改变,多次调用`equals()`的结果应该是相同的。 - **非空性**: `null`值的比较应返回`false`。 #### `hashCode()`与`equals()`的关系 为了确保集合类如`HashSet`和`HashMap`的...

    重载equals方法示例

    重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例

    equals方法的重写.docx

    1. **`equals`方法和`hashCode`方法应保持一致性**:如果两个对象根据`equals`方法是相等的,那么它们的`hashCode`也应该是相等的。这是因为某些集合框架(如`HashMap`)会使用`hashCode`来定位元素,而使用`equals`...

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

    为了实现元素的唯一性,`Set`接口要求覆盖`equals`方法,使其能够根据元素的实际内容来进行比较。 - **内容比较**: 在`Set`接口的不同实现中,通常会根据元素的属性或内容来进行比较。例如,在`String`类中,`...

    hashcode和equals方法

    equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.

    Java中equals方法隐藏的陷阱

    ### Java中equals方法隐藏的陷阱 在Java编程中,正确实现`equals`方法至关重要,它不仅影响对象的比较逻辑,还直接关系到集合类(如`HashSet`、`HashMap`等)的行为。本文将深入探讨Java中`equals`方法的一些常见...

    重写toString和equals方法

    Java 对象的toString和equals方法重写 在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象...

    js equals方法

    在JavaScript中,`equals`方法并不像在其他某些编程语言中那样是内置的,例如Java。但是,由于JavaScript的灵活性,我们可以自定义一个`equals`函数来实现对象间的深度比较。这个方法通常用于比较两个对象的属性和值...

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    equals(Object) 与 == 的区别

    在实际编程中,我们通常需要比较两个对象的内容是否相同,这时我们应该使用 equals(Object) 方法,而不是 == 运算符。例如,在比较两个字符串是否相同时,我们应该使用 equals(Object) 方法,而不是 == 运算符。 ...

    知识点 比较运算符==和equals方法的比较

    在Java编程语言中,比较运算符`==`和`equals()`方法是用来检查两个对象是否相等的,但它们之间存在显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,我们来看`==`运算符。它主要用于基本数据类型的比较...

    2.javaequals()方法.zip

    2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....

    C# Equals 和 GetHashCode 方法重写

    这意味着即使两个对象具有相同的属性值,只要它们不是同一个内存地址,`Object.Equals` 方法也会返回 `false`。为了使对象能够基于其内容(即属性值)来判断相等性,我们需要重写 `Equals` 方法。 **重写示例:** ...

    关于Object中equals方法和hashCode方法判断的分析

    1. 如果重写 equals 方法,那么也应该重写 hashCode 方法,以便确保 equals 方法返回 true 的两个对象拥有相同的 hashCode 值。 2. 如果两个对象不相同,那么它们的 hashCode 值可以相同,但是如果两个对象相同,...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    因此,当我们创建自定义类时,应该根据类的特性来重写 `equals()` 方法,以确保比较的是对象的属性值而非引用。 例如,如果有一个名为Person的类,包含firstName和lastName属性,我们可以这样重写 `equals()`: ``...

    C#使用Equals()方法比较两个对象是否相等的方法

    在C#编程语言中,`Equals()`方法是一个用于比较对象是否相等的关键工具。这个方法在处理对象间的等价性判断时非常常见,特别是在需要确定两个变量或实例是否表示相同数据的情况下。`Equals()`方法是Object类的一个...

    ==和equals方法究竟有什么区别

    同时,为了保持一致性,如果重写了`equals()`,通常也需要重写`hashCode()`方法,以满足`equals()`和`hashCode()`的合同约定,即如果两个对象相等(`equals()`返回`true`),它们的`hashCode()`应该也相等。...

    equals与hashCode方法讲解

    equals 与 hashCode 方法讲解 equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java...

    Java equals 方法与hashcode 方法的深入解析.rar

    在Java编程语言中,`equals()`方法和`hashCode()`方法是两个非常重要的概念,它们主要用于对象的比较和哈希表的高效运作。本解析将深入探讨这两个方法的用途、实现原理以及它们之间的关联。 首先,`equals()`方法是...

Global site tag (gtag.js) - Google Analytics