`
coderzhcn
  • 浏览: 19962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现高质量的equals方法的诀窍

阅读更多

1.使用==操作符检查“参数是否为这个对象的引用”。如果是,则返回true。这只不过是一种性能优化,如果比较操作有可能很昂贵,就值得这么做。

2.使用instanceof操作符检查“参数是否为正确的类型”。如果不是,则返回false。一般说来,所谓“正确的类型”是指equals方法所在的那个类。有些情况下,是指该类所实现的某个接口。如果类实现的接口改进了equals约定,允许在实现了该接口的类之间进行比较,那么就使用接口。集合接口(collection interface)如Set、List、Map和Map.Entry具有这样的特性。

3.把参数转换成正确的类型。因为转换之前进行过instanceof测试,所以确保会成功。

4.对于该类中的每个“关键(significant)”域,检查参数中的域是否与该对象中对应的域相匹配。

public class User {

 

private int id;

private String name;

private int age;

private String description;

 

public User(){

 

}

 

public User(int id, String name, int age, String description) {

super();

this.id = id;

this.name = name;

this.age = age;

this.description = description;

}

 

public int getId() {

return id;

}

 

 

public void setId(int id) {

this.id = id;

}

 

 

public String getName() {

return name;

}

 

 

public void setName(String name) {

this.name = name;

}

 

 

public int getAge() {

return age;

}

 

 

public void setAge(int age) {

this.age = age;

}

 

 

public String getDescription() {

return description;

}

 

 

public void setDescription(String description) {

this.description = description;

}

 

@Override

public boolean equals(Object o) {

//为了避免不必要的空指针异常麻烦

if(o==null){

return false;

}

//为了避免不是User类型的对象

if(!(o instanceof User)){

return false;

}

 

//以下才是正式的比较两个User对象是不是同一个对象的方法

User user = (User)o;

 

if(user.getName().equals(this.name) && user.getId() == this.id){

return true;

}

 

return false;

}

 

@Override

public int hashCode() {

return this.name.hashCode() + this.id;

}

}

 

分享到:
评论

相关推荐

    重写equals方法

    在 Object 基类中,equals 方法的实现是使用“==”操作符来比较对象的引用,但是这并不满足实际需求。因此,需要重写 equals 方法以满足特定的需求。 什么时候需要重写 equals 方法? ------------------------- ...

    重载equals方法示例

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

    equals方法的重写.docx

    `equals`方法是Java语言中Object类的一个重要成员方法,其默认实现是比较两个对象的内存地址是否相同(即是否为同一个对象)。为了使对象之间能够基于内容进行比较,通常需要在具体的类中重写`equals`方法。 #### ...

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

    ### set接口中hashCode和equals...在Java中,正确实现`hashCode`和`equals`方法对于确保`Set`接口的有效性和高性能至关重要。开发人员需要仔细设计这两个方法,以满足`Set`接口的要求,并考虑到性能和一致性等方面。

    Java中equals方法隐藏的陷阱

    ### Java中equals方法隐藏的陷阱 在Java编程中,正确实现`equals`...通过遵循上述建议,可以有效地避免`equals`方法中的常见陷阱,并提高程序的质量。同时,了解这些陷阱背后的原理也有助于加深对Java语言特性的理解。

    hashcode和equals方法

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

    重写toString和equals方法

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

    js equals方法

    综上所述,`equals`方法是JavaScript中实现深度比较的常见做法,它弥补了内置等于操作符在复杂数据结构比较上的不足,使得我们能够更精确地判断两个对象是否相等。在实际开发中,根据项目需求,可以灵活调整和优化这...

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

    总结来说,`==`在基本类型上比较值,在引用类型上比较引用,而`equals()`方法默认比较引用,但在多数情况下会根据具体类的实现比较对象内容。理解这两个方法的区别和使用场景,可以帮助我们编写出更加准确和可靠的...

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

    在实践中,还要注意类是否正确地实现了`equals()`和`hashCode()`方法,以确保一致性,特别是当你在处理集合框架中的对象时,如HashSet和HashMap,它们依赖`equals()`和`hashCode()`来确定元素的唯一性。

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

    在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...

    C# Equals 和 GetHashCode 方法重写

    通过这种方式,可以大大简化 `Equals` 和 `GetHashCode` 方法的编写工作,并确保代码的质量和一致性。 总结来说,正确地重写 `Equals` 和 `GetHashCode` 方法对于实现有效的对象比较和提高数据结构的性能至关重要。...

    equals与hashCode方法讲解

    在 Java 的 Object 类中,equals 方法的实现是比较两个对象的内存地址是否相等。如果两个对象的内存地址相同,那么它们就是相等的。public boolean equals(Object obj) { return (this == obj); } 而在子类中,...

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

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象...在开发过程中,要时刻注意这两个方法的正确实现,以提高代码质量和可维护性。

    2.javaequals()方法.zip

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

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

    总的来说,理解并正确使用`equals()`和`hashCode()`方法对于编写高质量的Java代码至关重要,尤其是在处理集合框架中的对象时。这两个方法的合理实现能确保对象比较的正确性和哈希表操作的效率。希望这个深入解析能...

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

    然而,对于自定义类,`Equals()`方法的行为可能需要根据具体需求进行重写,以实现更加精确的比较逻辑。 首先,我们来看一下基本类型的`Equals()`方法使用。在上面的代码示例中,`price` 和 `amount` 都是整型变量,...

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

    值得注意的是,当自定义类时,通常建议重写`equals()`方法来实现业务逻辑上的内容比较。同时,为了保持一致性,如果重写了`equals()`,通常也需要重写`hashCode()`方法,以满足`equals()`和`hashCode()`的合同约定,...

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

    它的默认实现是比较两个对象的引用是否相同,如果是同一个对象,那么 equals 方法将返回 true,否则返回 false。但是,如果我们想要比较两个对象的实际内容是否相同,那么我们需要重写 equals 方法。 hashCode 方法...

    Java中equals()方法重写实现代码

    Java中equals()方法重写实现代码详解 Java中equals()方法是Object类中定义的,作为所有类的父类,任何类都隐含地继承了该方法。 equals()方法用于判断两个对象的内容是否相同,如果没有重写该方法的类,需要重写该...

Global site tag (gtag.js) - Google Analytics