精华内容
下载资源
问答
  • C#重写Equals方法步骤

    2016-04-07 09:54:00
    检查传入的参数是否为null, 如果为null,那么返回false, 否则执行步骤2 调用ReferenceEquals查看是否为统一个对象,如果是,那么返回true, 否则执行步骤3 判断两者是否为同一类型,如果...在重载的Equals方法中,...
    1. 检查传入的参数是否为null, 如果为null,那么返回false, 否则执行步骤2
    2. 调用ReferenceEquals查看是否为统一个对象,如果是,那么返回true, 否则执行步骤3
    3. 判断两者是否为同一类型,如果不是,那么返回false,否则执行步骤4
    4. 调用自己写的一个Equals方法重载,其参数为具体子类型而非object,然后返回其执行结果
    5. 在重载的Equals方法中,调用GetHashCode函数并判断两者的返回值是否相同,如果不同则返回false,否则执行步骤6
    6. 在重载的Equals方法中,判断类型的父类是否为Object,如果不是则调用Base.Equals,如果Base.Equals返回false, 那么返回false,否则执行步骤7
    7. 比较类型自己的Field是是否相等,如果相等则返回true,否则返回false。
    8. 除此之外,还需要重载GetHashCode函数以及==,!=运算符

     以上是完整的重载步骤,使用时根据具体情况可以跳过一些,比如对struct类型重载Equals时,步骤2应该省略。

    转载于:https://www.cnblogs.com/dereklovecc/p/5362206.html

    展开全文
  • 一、重写equals和hashCode的意义1.在使用Set接口下的实现类存储...在存储我们自定义的类型时,需要重写equals方法和hashCode方法,以确保集合中存储的数据都是唯一性3.所有类都间接或直接继承Object类,Object类中equa

    一、重写equals和hashCode的意义

    1.在使用Set接口下的实现类存储数据时,需要确定存入的数据是否已经存在,对于八大基本数据类型的包装类以及String类,java默认已经重写了equals方法和hashCode方法

    2.在存储我们自定义的类型时,需要重写equals方法和hashCode方法,以确保集合中存储的数据都是唯一性

    3.所有类都间接或直接继承Object类,Object类中equals方法比较的对象的引用地址,从现实业务逻辑来说,程序应该比较对象中的数据是否相同,而不应该是对象的引用地址
    二、重写equals方法需要满足以下几条语意规定

    自反性:
    对于任何引用,只要其不为 null ,那么对其自身使用 equals 方法将永远返回 true ,
    也就是说 x.equals(x)=true

    对称性:
    对于任何引用 a 与 b ,若都不为 null ,那么 a 对 b 进行 equals 检查后得到的结果,
    与 b 对 a 进行 equals 得到的结果相同,
    也就是说 a.equals(b) = b.equals(a)

    传递性:
    对于任何非空引用值 a 、 b 和 c ,如果 a 对 b 进行 equals 检查返回 true ,
    并且 b 对 c 进行 equals 检查也返回 true ,那么 a 对 c 进行 equals 检查也返回 true ,
    也就是说 a.equals(b) = b.equals(c) = a.equals(c)

    一致性:
    对于任何非空引用值 a 和 b ,在对象上参与 equals 比较的成员没有被修改的情况下,
    多次用 a 对 b 进行 equals 检查的结果应当始终相同。

    对于任何非空引用 a ,用其对 null 进行 equals 检查应当始终返回 false ,也就是说 a.equals(null)=false
    三、equals方法重写的几个步骤

    1.先判断两个向比较的对象引用是否为同一对象,这一步可以提高性能,如果两个对象引用指向同一个对象,其equals测试肯定返回true,不同再去比较任何内容
    2.接下判断传递进来的对象是否为null,如果是直接返回false
    3.然后测试传递进来的对象引用是否通过自己类型的instanceof测试,如果不通过则返回false,因为传递进来的对象引用一定是Object类型,也就是说引用指向的对象有可能是其他类型的,如果是其他类型的则没有可比性
    4.若通过自己类型的instanceof测试则将传递进来的对象引用强制转换成自己的类型,再测试相关的成员是否等价,若等价则返回true,否则返回false

    注意:重写equals方法就必须重写hashCode方法,进而保证两个对象得到相同的哈希码,否则两个等价对象可能得到不同的哈希码,这在集合框架的使用中有可能产生严重的问题。

    四、重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用

    1.Map、Set等集合类型存放对象必须是唯一的(Map的Key必须唯一)
    2.集合类型判断两个对象是否相等,是先判断equals是否相等,如果equals返回true,还要再判断两个对象hashCode返回值是否相等,如果equals返回true并且hashCode返回值相等才认为两个对象是相等的
    3.由于Object的hashCode返回的是对象的hash值,所以即使equals返回true,集合也可能判定两个对象不等,所以必须重写hashCode方法,以保证当equals返回true时,hashCode返回的值也相等,这样才能时得集合中存放的对象是唯一的

    五、重写hashCode方法需要满足以下规定

    1.Java程序执行期间,于同一对象上多次调用hashCode方法时,在对象上参与 equals 比较的成员没有被修改的情况下,必须一致地返回相同的整数

    2.从某一应用程序的一次执行到同一应用的另一次执行,该整数无须保持一致

    3.如果两个对象各自调用hashCode方法产生不同的结果,对这两个对象进行 equals 比较一定返回false

    4.如果根据 equals 方法的比较,两个对象是等价的,那么在两个对象中各自调用hashCode方法必须产生相同的整数结果

    5.如果根据 equals 方法的比较,两个对象是不等价的,那么在两个对象中各自调用hashCode方法不一定会生成不同的整数结果

    简单的描述如下:
    a.equals(b)==true a.hashCode()==b.hashCode()
    a.hashCode()==b.hashCode 对equals方法无要求
    a.equals(b)==false 对hashCode方法无要求
    a.hashCode()!=b.hashCode() a.equals(b)==false

    原文链接:http://www.banzg.com/archives/722.html
    [ 转载必须在正文中标注并保留原文链接、译文链接和译者等信息。]

    展开全文
  • 最近看了点Java的东西,看了关于自定义equals方法的一点基础的东西。总结如下: 以下是步骤: 1.首先判断参数是不是null,是的话就返回false,不是就继续判断。 2.因为参数是Object类型的,所以需要判断参数的...

      最近看了点Java的东西,看了关于自定义equals方法的一点基础的东西。总结如下:

     

      以下是步骤:

     

      1.首先判断参数是不是null,是的话就返回false,不是就继续判断。

     

      2.因为参数是Object类型的,所以需要判断参数的实际类型,一般分为两种情况:第一种就是你不区分子类和父类,这时采用instanceof操作符;第二种就是需要区分的情况,这时采用this.getClass() == 参数名.getClass()进行判断。(Class类没有实现equals方法,只需使用==即可)上述判断不成立则返回false。

     

      3.把参数强制转换成当前类型。

     

      4.自定义你要比较的内容。

     

     

      一般来说:你重写了equals方法就要重写hashCode方法,关于hashCode有点复杂,以后接着总结。

    展开全文
  • Java中equals方法重写 Object类中的equals方法: public boolean equals(Object obj) { return (this == obj);//比较地址值 } Rewrite类中重写的Object类中的equals方法: package test2; public class ...

    Java中equals方法的重写

    Object类中的equals方法:

     public boolean equals(Object obj) {
            return (this == obj);//比较地址值
        }
    

    Rewrite类中重写的Object类中的equals方法:

    package test2;
    
    public class Rewrite {
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public boolean equals(Object obj) {
            /*return super.equals(obj);不能直接这样写的原因,不管返回的值是true还是false,都会直接跳出方法,后面的代码不在执行**/
            if (this == obj) {//Object类中的equals方法
                return true;
            }
            //重写的equals,扩展
            if (obj == null) {
                return false;
            }
            //进行类型判断
            if (obj instanceof Rewrite) {
                Rewrite rewrite = (Rewrite) obj;
                System.out.println(toString());//输出rewrite对象
                System.out.println(rewrite.toString());//输出rewrite1对象
    			//判断name是否相同,根据需求扩展
                if (name != null) {
                    if (rewrite.name != null) {
    
                        if (name.equals(rewrite.name)) {
                            return true;
                        }
                    }
    
                }
            }
            return false;
        }
        @Override
        public String toString() {
            return "Rewrite{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    

    测试类:

    package test2;
    
    public class Test {
    
    
    
        public static void main(String[] args) {
            Rewrite rewrite=new Rewrite();
            rewrite.setName("wang");
            Rewrite rewrite1=new Rewrite();
            rewrite1.setName("qio");
    
    
    
            if ( rewrite.equals(rewrite1)==true){
    
                System.out.println("是同一个");
    
    
            }else {
                System.out.println("不是同一个");
            }
    
    
    
    
    
    
    
        }
    
    
    }
    
    

    运行结果:

    Rewrite{name='wang'}
    Rewrite{name='qio'}
    不是同一个
    
    

    分享结束

    展开全文
  • Java语言规范要求equals方法具有下面的特性: 自反性:对于任何非空引用x,x.equals(x)应该返回true 对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true 传递性:对于任何引用x...
  • 联合主键为什么要重写equals方法和hashCode方法,是为了保证唯一性 1、在数据库保证唯一性是使用的联合主键 2、把一系列的对象放到内存的时候,为了区分同名对象,数据库是使用联合主键来区分,内存中也是用相应的...
  • 重写equals()方法简介

    2012-09-17 11:39:44
    整理了一下重写equals()方法步骤如下:     l 首先应该测试两个引用是否指向同一个对象,如果是则直接返回true。这一步不是必须的,但可以提高比较时的性能,因为如果两个引用指向同一个对象,其equals...
  • 重写equals和hashCode

    2019-03-18 22:54:20
    重写equals的5个步骤 自反性(比较两个引用是否指向同一个对象) 判断o是否为null 判断两个引用指向的实际对象类型是否一致 强制类型转换 依次比较各个属性值是否相同(基本数据类型用“==”比较,引用数据类型用e....
  • public boolean equals(Object otherObject) { if(this==otherObject)//检测this与otherObject是否引用同一个对象 return true; if(otherObject==null)//检测otherObject是否为null,这项检
  • 关于重写equals方法: 共需要六个步骤 需要比较的对象是否为空 是否在和自身比较 两个对象类是否相同 比较的内容是否都为空 比较的内容是否相等 返回true @override public boolean equals(object obj){ //比较的...
  • java语言中equals方法重写 一、重写步骤: (1)比较两个引用是否指向同一个对象; (2)判断两个引用指向的实际对象类型是否一致; (3)强制类型转换; (4)比较两个引用的长度是否一致; (5)比较两个引用...
  • 覆盖Objects.equals方法

    2019-03-07 22:34:00
    O bject类中的equals方法 源码 public boolean equals(Object obj) { return (this == obj); } Object的equals方法判断的仅仅是两个对象是否具有相同的引用,但是对于大多数类来说,...重写equals方法 1.步骤 (1...
  • Set接口不能添加重复元素必须覆盖hashCode()方法equals()方法,hashSet底层维护的是一个hash表本质也是一个数组,也是一种数据结构,计算依赖hash值,所有的对象都可以调用hashCode方法获取到hash值(此步骤就...
  • 重写Object类中的equals方法,得在方法中重新判断子类中所定义所有属性的字节码文件是否相等,若相等,则创建子类对象逐一比较各个属性:比较的时候还是用equals比较# 文章目录要重写Object类中的equals方法,得...
  • 当对一个对象有不同的判断equals的标准时,我们可以重写equals方法。重写equals必须按一下步骤 定义个一个类。 class Student {   private String name;   private int age;     // ...
  • instance关键字 ...静态代码块,初始化块,构造器的执行步骤 静态代码块先执行,且为一次,然后父类到子类初始化代码块,构造器依次执行 class Father { static { System.out.println("11111111111"); } ...
  • Object类中的equals重写

    2019-06-15 14:16:41
    /*Object类下equals方法重写 * 当我们使用equals的时候,他进行对比的是对象的地址, * 所以实际使用的时候没什么用,除非对象和自己比较才会得到一样的结果。 * 为了实现比较对象的内容(属性和方法),我们将它进行...
  • 前言:hashmap是数据+链表的结构,决定它的元素在内存的位置的是...修改一个key-value键值对,要经过这五个步骤: 第一步:调用key.hashCode()获取key的hashcode值; 第二步:调用hash(),计算hash值,此算法加入了...
  • 二、使用步骤1.IDEA快捷键生成equals()方法及解释总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了...
  • abstract抽象类 学习抽象类: ...​ 2:子类必须要重写父类的抽象方法 抽象类: ​ 1、包含了抽象方法的的类称之为抽象类。 ​ 2、被abstract修饰的类称之为抽象了 抽象方法: ​ 1、只要方法的声明,没...
  • idea 重写方法便捷 ... /** author 骚彬 date 2019/7/27 19:28 / / JavaBean重写Object类的方法 需求:开发中通常需要将对象转成...定义标准JavaBean类,重写toString和equals方法步骤: ◆定义标准Java Bean类Student...
  • 定义标准JavaBean类,重写toString和equals方法步骤 定义标准Java Bean类Student,属性:id,name,score 重写toString()方法 该对象的字符串表现形式,一般都是包含所有属性值且具有一定的格式的字符串 重写...
  • hashcode方法重写

    2021-01-10 21:54:24
    重写hashCode()方法的基本规则 a、注意事项 1、同一个对象多次调用hashCode()方法应该返回相同的值 2、两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法应返回相等的值 3、对象中...
  • 重写hashCode()方法

    2015-08-31 15:26:49
    一个好的散列函数通常倾向于"为不相同的对象产生不相等的散列码"。理想情况下,散列函数应该把集合中不...2、对于对象中每个关键域f(指equals方法中涉及的每个域),完成以下步骤:  a、为该域计算int类型...
  • 使用步骤应用举例: 顶层父类:Object 所有的类的父类 控制台录入:Scanner 可以接受从控制台录入的数据 字符串处理:String 类 字符串处理:StringBuilder 和 StringBuffer 日期获取:Date 和Calendar 基本...
  • Object类

    2018-07-11 22:50:00
    equals方法 api中方法定义 ...重写equals方法步骤(1和2步的顺序不是固定的): 1、判断参数和调用函数的对象是否是同一个对象,如果是,直接返回true;否则,进行下一步; 2、判断参数是否...
  • 重写hashCode

    2020-09-09 09:59:51
    对于对象中某个关键域f(指equals方法涉及到的每个域),完成以下步骤 把某个非0的常数,比如说17 保持在int 类型的变量中 a.为该域计算int类型的散列码c 如果该域事boolean类型则计算f?1:0 如果该域是byte char ...
  • 方法介绍 1.getClass() final,native方法,获得运行时类型。 2.hashCode() hashCode()方法主要用于hash表,比如HashMap,当集合要添加元素时,大致按如下步骤: 先调用该元素的hashCode()...所以重写equals()方法时.
  • equals()方法的时候,发现和eclipse上的有些差别,经过测试,找到可以生成相同的代码的方式,以下是操作步骤: alt+insert: 选择如图: next next: next:——>finish ...
  • Effective Java----2

    2017-03-20 21:51:08
    1.equals方法以及HashCode方法 ...(4) 一致性(consistent)这几个特性都比较容易理解,违反其中任何一条,都将导致重写的equals方法不能正常工作,具体实施起来,即要按如下步骤重写equals方法:(1) 使用==操

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

重写equals方法步骤