`

java重写类的equal 和hashcode

阅读更多
java equals 与 hashcode的理解
http://blog.csdn.net/lishehe/article/details/18839495

java 类的equals方法重写例子
     public boolean equals(Object o) {
	        if(o == null) {
	            return false;
	        }
	        if (o == this){
	           return true;
	        }
	        if (getClass() != o.getClass()){
	            return false;
	        }

	        Employee e = (Employee) o;
	        return (this.getId() == e.getId());

//如果有引入common包则可以用 Apache Commons Lang包重写hashCode() 和equals()方法 
               //return new EqualsBuilder().append(getId(), e.getId()).sEquals();
	}
 


hashcode重写
   final int PRIME = 31;
	 int result = 1;
	 result = PRIME * result + getId();
	 return result;
//Apache Commons final int PRIME = 31;
// return new HashCodeBuilder(getId()%2==0?getId()+1:getId(),PRIME).toHashCode();


注意:当使用ORM的时候特别要注意的
    如果你使用ORM处理一些对象的话,你要确保在hashCode()和equals()对象中使用getter和setter而不是直接引用成员变量。因为在ORM中有的时候成员变量会被延时加载,这些变量只有当getter方法被调用的时候才真正可用。
    例如在我们的例子中,如果我们使用e1.id == e2.id则可能会出现这个问题,但是我们使用e1.getId() == e2.getId()就不会出现这个问题。


两个对象先比较的事hashcode,再比较equals。如果equals相等,说明hashcode相等,如果两个对象hashcode相等,不一定说明两者相等,只能说明它们在同一个hash链表上,还需要比较它们的equals方法。
原文链接http://www.oschina.net/question/82993_75533
分享到:
评论

相关推荐

    java中重写equals和重写hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...

    关于hashCode()和equals()的本质区别和联系

    本文将详细介绍 hashCode() 和 equals() 的本质区别和联系,并探讨在创建 Java 类时如何定义这些方法。 hashCode() 方法 hashCode() 方法是 Object 类中的一个方法,它返回对象的哈希码值。哈希码值是一个整数,它...

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

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    这些概念在Java编程中至关重要,特别是在处理集合类和比较对象时。 1、**hashCode与equals两者之间的关系**: 当我们说两个对象`equals()`返回`true`时,意味着它们在逻辑上是相等的。根据Java规范,如果两个对象...

    Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。  hashCode()和equals()定义在Object类中,这...

    Java中equals()与hashCode()的原理与设计

    1、何时需要重写equals()  当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。  2、为什么改写equals()的时候,总是要改写hashCode()  两个原则:  hashCode()的返回值和equals()的关系...

    java中 == 与 equal 的区别讲解

    在Java编程语言中,`==` 和 `equals()` 是两种常用的比较操作符,它们在不同情况下有着不同的含义和用途。本文将深入探讨这两者之间的差异,并通过实例代码和理论解释来帮助理解。 首先,`==` 操作符主要用于基本...

    Java中的hashcode方法介绍

    正确地重写`hashCode`和`equals`方法对于实现符合预期的行为至关重要,尤其是在自定义对象类中。这两个方法必须保持一致性:如果两个对象相等(`equals`返回`true`),那么它们的`hashCode`值必须相同。反之,如果`...

    Java面经.适用于校招

    1.9 String、StringBuffer、StringBuilder、hashCode和equal - String是不可变的字符串序列。 - StringBuffer和StringBuilder是可变字符序列,其中StringBuffer是线程安全的,StringBuilder则没有线程安全保证。 - ...

    javaee_tedu_day09.zip

    ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法

    java个人总结.docx

    在这个个人总结中,我们将探讨几个关键的Java知识点,包括对象创建、equals与hashCode方法、对象序列化以及String、StringBuffer和StringBuilder的区别。 首先,让我们来看看创建Java对象的四种方式: 1. **New**...

    Findbugs缺陷等级对照表.pdf

    * 43B:类中定义了 hashCode() 方法,但是没有重写 java.lang.Object 中的 hashCode() 方法 * 44C:类中定义了 tostring() 方法,但是没有重写 java.lang.Object 中的 tostring() 方法 * 45C:某些方法名只有大小写...

    复杂对象的比较

    Java社区提供了一些工具类和库来简化对象比较,例如Apache Commons Lang的`EqualsBuilder`和`HashCodeBuilder`,或者Google的Guava库中的`Objects.equal()`和`Objects.hashCode()`。 在实际编程中,确保复杂对象的...

    java面试题目 想要的拿去吧

    这里需要注意的是,如果重写了`equals`方法,通常也需要重写`hashCode`方法以保持一致性。 #### 五、值传递与引用传递 Java是一种值传递的语言,即传递的是变量的值而不是变量本身。对于基本数据类型,传递的是...

    Java中Equals使用方法汇总

    在Java中,正确使用和重写`equals`方法对于比较对象和在数据结构中查找对象至关重要。遵循通用约定和同时更新`hashCode`方法能确保一致性和正确性。通过理解和实践这些原则,开发者可以创建出更可靠、更具可维护性的...

    学生集合排序

    本文将详细探讨如何实现这个过程,重点在于重写`hashCode`和`equals`方法,以及利用`Collections`工具类和自定义比较器来实现多属性排序。 首先,让我们了解`hashCode`和`equals`方法的重要性。这两个方法是Java中...

    sun公司开源jar -log.jar

    sun公司开源的jar包,里面封装了log4的日志以及关于自动生成hashcode代码以及重写equal方法的jar

    Java编程中避免equals方法的隐藏陷阱介绍

    .equals方法和hashCode方法是相关的,重载了equals方法必须同时重载hashCode方法,否则可能会出现意想不到的结果。 陷阱3:建立在会变化字域上的equals定义。equals方法不能依赖于可变的字段,否则可能会出现...

    与==的区别.docxequal与==的区别.docx

    对于自定义类,如果你希望`equals()`方法比较对象的属性值,你需要在类中重写`equals()`和`hashCode()`方法,以确保正确的行为。通常,`equals()`方法应该与`hashCode()`方法保持一致,即相等的对象应该具有相同的...

    麻省理工18年春软件构造课程阅读15-相等-1

    但是,当我们定义自定义类时,如`Duration`,通常需要重写`equals()`方法以根据类的特定属性来比较对象。例如,`Duration`类中错误的`equals()`实现仅比较了两者的长度,这忽略了对象的实例(引用)信息,可能导致不...

Global site tag (gtag.js) - Google Analytics