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()` 是两个非常重要的方法,它们主要用于比较对象的平等性以及在散列数据结构(如 `HashMap`、`HashSet` 等)中的对象定位。当我们创建自定义类时,有时需要根据业务需求...
本文将详细介绍 hashCode() 和 equals() 的本质区别和联系,并探讨在创建 Java 类时如何定义这些方法。 hashCode() 方法 hashCode() 方法是 Object 类中的一个方法,它返回对象的哈希码值。哈希码值是一个整数,它...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...
这些概念在Java编程中至关重要,特别是在处理集合类和比较对象时。 1、**hashCode与equals两者之间的关系**: 当我们说两个对象`equals()`返回`true`时,意味着它们在逻辑上是相等的。根据Java规范,如果两个对象...
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
1、何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。 2、为什么改写equals()的时候,总是要改写hashCode() 两个原则: hashCode()的返回值和equals()的关系...
在Java编程语言中,`==` 和 `equals()` 是两种常用的比较操作符,它们在不同情况下有着不同的含义和用途。本文将深入探讨这两者之间的差异,并通过实例代码和理论解释来帮助理解。 首先,`==` 操作符主要用于基本...
正确地重写`hashCode`和`equals`方法对于实现符合预期的行为至关重要,尤其是在自定义对象类中。这两个方法必须保持一致性:如果两个对象相等(`equals`返回`true`),那么它们的`hashCode`值必须相同。反之,如果`...
1.9 String、StringBuffer、StringBuilder、hashCode和equal - String是不可变的字符串序列。 - StringBuffer和StringBuilder是可变字符序列,其中StringBuffer是线程安全的,StringBuilder则没有线程安全保证。 - ...
ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法
在这个个人总结中,我们将探讨几个关键的Java知识点,包括对象创建、equals与hashCode方法、对象序列化以及String、StringBuffer和StringBuilder的区别。 首先,让我们来看看创建Java对象的四种方式: 1. **New**...
* 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()`。 在实际编程中,确保复杂对象的...
这里需要注意的是,如果重写了`equals`方法,通常也需要重写`hashCode`方法以保持一致性。 #### 五、值传递与引用传递 Java是一种值传递的语言,即传递的是变量的值而不是变量本身。对于基本数据类型,传递的是...
在Java中,正确使用和重写`equals`方法对于比较对象和在数据结构中查找对象至关重要。遵循通用约定和同时更新`hashCode`方法能确保一致性和正确性。通过理解和实践这些原则,开发者可以创建出更可靠、更具可维护性的...
本文将详细探讨如何实现这个过程,重点在于重写`hashCode`和`equals`方法,以及利用`Collections`工具类和自定义比较器来实现多属性排序。 首先,让我们了解`hashCode`和`equals`方法的重要性。这两个方法是Java中...
sun公司开源的jar包,里面封装了log4的日志以及关于自动生成hashcode代码以及重写equal方法的jar
.equals方法和hashCode方法是相关的,重载了equals方法必须同时重载hashCode方法,否则可能会出现意想不到的结果。 陷阱3:建立在会变化字域上的equals定义。equals方法不能依赖于可变的字段,否则可能会出现...
对于自定义类,如果你希望`equals()`方法比较对象的属性值,你需要在类中重写`equals()`和`hashCode()`方法,以确保正确的行为。通常,`equals()`方法应该与`hashCode()`方法保持一致,即相等的对象应该具有相同的...
但是,当我们定义自定义类时,如`Duration`,通常需要重写`equals()`方法以根据类的特定属性来比较对象。例如,`Duration`类中错误的`equals()`实现仅比较了两者的长度,这忽略了对象的实例(引用)信息,可能导致不...