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

怎样正确改写Equals方法

 
阅读更多

地球人都知道,equals方法需要满足自反,对称,传递,一致,非空特性,如果我们需要在代码中改写equals方法,怎么样才能保证这几个特性呢?

(1)使用==操作符来检查实参是都指向当前对象的一个对象

(2)使用instanceof操作符检查实参是都为正确类型

(3)将实参转换成正确对象

(4)根据业务需求判断当前对象与实参对象是否相等

(5)最后,必须进行检查传递,一致和对称

如果满足了以上5点,基本上可以算是成功改写equals方法,当然还必须同时改写hasCode方法

下面是一个改写的例子供大家参考

 

public boolean equals( Object obj )
    
...{
        
ifthis==obj ) return true;
        
        
if!( obj instanceof Base ) )
            
return false;
        
        Base target 
= (Base)obj;
        
        
ifthis.getId()!=null && this.getId().length()>0 )
        
...{
            
return this.getId().equals( target.getId() );
        }

        
        
if( target.getId()!=null && target.getId().length()>0 )
        
...{
            
return false;
        }

        
        
return EqualsBuilder.reflectionEquals(this, obj);
    }

 

改写后的hashCode方法(使用common-lang)

原理:如果id属性不为空,则直接使用id的hashCode,如果为空,则使用这个对象的所有属性来生成散列值

 

 public int hashCode()...{
        
if(this.getId()!=null&&this.getId().length()>0)...{
            
return this.getId().hashCode();
        }

        
return HashCodeBuilder.reflectionHashCode(this);
    }


分享到:
评论

相关推荐

    中软国际笔试题,不知道对大家有米有帮助

    11. 如果重写了 `myObject` 的 `equals()` 方法,下列哪个方法可能改写?答案是 `hashCode()` 方法,因为 `equals()` 方法和 `hashCode()` 方法是相关的。 12. 下列哪些是数据库中存储过程使用的参数?答案是 `...

    2021-2022计算机二级等级考试试题及答案No.13347.docx

    根据给定文件的信息,我们可以总结出以下相关的IT知识点: ...### 正确答案:在Java中,Set集合使用`equals()`方法来判断元素是否重复。`==`用于比较对象引用是否相同,而`equals()`方法用于比较对象的内容是否相同。

    2021-2022计算机二级等级考试试题及答案No.15110.docx

    4. **Word的改写模式**:在Word中,改写模式允许用户键入的字符替换掉插入点后的字符,选项正确。 5. **表达式计算**:`VAL(SUBS("奔腾 586",5,1))`取“奔腾 586”中的数字5,加上`LEN("VisualFoxpro")`的长度13,...

    2021-2022计算机二级等级考试试题及答案No.5271.docx

    String(s)和StringBuffer(s1)的equals()方法用于比较它们的内容。代码编译和执行都不会出错(D)。 6. E-R 图中的实体联系:在E-R图中,菱形(C)代表实体之间的联系。 7. Word 新建文档快捷键:Ctrl+N是新建...

    java基础题

    5. 解决乱码问题的方法包括:使用正确的编码转换、设置编码过滤器、统一编码标准和设置中间件的URL编码类型。 6. Spring的IoC(Inversion of Control,控制反转)特性中,A选项描述错误,因为IoC指的是控制权由应用...

    javaSE基础知识点试卷(2).docx

    用 switch 改写下面的代码片段,正确的是()** 此题未提供具体的代码片段,但根据题目描述,我们可以假设原始代码片段使用了 if-else 结构来处理不同的条件。对于使用 switch 语句的要求,我们需要明确 case 后面...

    Select的where条件解析增加Between解析说明2

    为了正确处理这些变化,`hashCode`和`equals`函数也被相应地更新。 在解析SQL的过程中,`SelectSQLAnalyser`类的`analyseWhereCondition`和`tryColumnCondition`函数得到了增强,新增了对`BetweenOperatorNode`的...

    空指针异常

    避免这种异常的关键在于始终确保对象在使用前已经被正确初始化,并在执行任何方法调用或字段访问之前检查它们是否为 null。此外,良好的编程习惯、合理的异常处理以及利用 Java 8 中的 Optional 类型都是防止空指针...

    Java入门学习笔记

    - Object类是所有Java类的父类,提供了如toString()、equals()等常用方法。 **7.10 封装类** - Java为每种基本数据类型提供了对应的包装类,如Integer、Double等。 **7.11 内部类** - **7.11.1 内部类的分类** ...

    2021-2022计算机二级等级考试试题及答案No.1622.docx

    22. 对象的比较:没有给出具体问题,但通常涉及对象比较时,需要了解如何比较类实例的属性或使用equals()方法。 以上知识点涵盖了计算机基础知识、编程语言特性、数据库操作和软件测试等方面,这些都是计算机二级...

    2021-2022计算机二级等级考试试题及答案No.4840.docx

    动窗口正确答案: D 这些题目涵盖了计算机基础知识的多个方面,主要包括网络协议、TCP/IP通信、Word编辑模式、逻辑运算、数据库设计、数据结构、编程语言特性、软件工程、计算机硬件分类、数据库管理系统、Java特点...

    基于索引的SQL语句优化之降龙十八掌.doc

    【正文】 在数据库管理和开发中,SQL语句的优化是至关重要的,因为它直接影响到系统性能。...每个技巧都对应一种特定的优化策略,根据实际数据库环境和查询需求,灵活运用这些方法,可以打造高效、稳定的数据库系统。

    达内 coreJava 习题答案

    1,编写程序,判断给定的某个年份是否是闰年。 闰年的判断规则如下: (1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。 import java.util.Scanner;...

Global site tag (gtag.js) - Google Analytics