?!?!在Java中重写equals()方法?!?!

    技术2025-01-10  14

    为什么要重写equals()方法?

    因为继承Objec的equals方法只能判断两个对象是否是同一个对象。可是我们认为常用的equals方法应该具有逻辑判断功能,所以我们重写equals方法,可以按照我们所需的要求自定义。

    Object中equals方法

    Object中的equals方法用于检测一个对象是否等于另外一个对象. Object类中,判断两个对象是否引用同一个对象实现equals方法,源码如下:

    public boolean equals(Object obj) { return (this == obj); }

    实际处理中,若要比较两个对象是否相等,一般需要重写equals方法.

    equals()与==的区别

    ==比较基本数据类型,比较的是值==比较引用数据类型,比较的是地址equals()本身也比较地址,因为在equals()方法中,直接return的就是 this == obj但是因为String类对equals()方法进行了重写,所以可以比较内容

    代码

    package Test1; /** * 重写toString方法 */ public class Person { private String name;//名字 private String idCard;//身份证号 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public Person(String name, String idCard) { this.name = name; this.idCard = idCard; } public Person() {} @Override public boolean equals(Object obj) { if (this == obj) {//先进行一个判断 当前对象 this 和 传进来的 obj 进行比较 return true; } if (obj instanceof Person) { //比较当前对象是属于我们要比较的Person类型的 ,才可以进行强转 Person p = (Person)obj;//强制类型转换 //父类Object类中不含getName()方法,所以需要强转,转为子类对象 if(this.getName().equals(p.getName()) && this.getIdCard().equals(p.getIdCard())) { return true; } } else { System.out.println("不要瞎传对象"); } return false; } public static void main(String[] args) { // equals 方法 // == 比较基本数据类型 比较的是值 比较引用数据类型 比较的是内存中的地址 // equals方法本身也是比较的地址 因为equals方法中 直接return 的 就是 this == obj Person p1 = new Person(); Person p2 = new Person(); System.out.println(p1 == p2); // 对象中不含值,如果此句不注释,会报空指针异常 // System.out.println(p1.equals(p2)); System.out.println("=========我是分隔符========"); // 我们通过new关键字创建出来的对象 地址的都不一样的 // 我们通过==比较两个对象 地址肯定是不一样的 // 我们现实生活中会有一些这样的需求 比如 两个人名字 身份证号都相同 // 这种情况 我们要使用equals来比较 输出为true Person p3 = new Person("赵四" , "41023459578"); Person p4 = new Person("赵四" , "41023459578"); System.out.println(p3.equals(p4)); System.out.println("=========我是分隔符========"); Person p5 = new Person("广坤" , "4101234"); Person p6 = new Person("广坤" , "41022356"); System.out.println(p5.equals(p6)); } }

    输出结果为:

    java规范中对equals方法的约束

    java规范中equals方法特征

    自反性对于任何非空引用x, x.equals(x) 返回true;对称性对于任何引用x, y, 当且仅当y.equals(x) 返回true, x.equals(y)返回true;传递性对于任何引用x, y, z, 若x.equals(y)返回true, y.equals(z)返回true; 则 x.equals(z)返回true;一致性若x和y引用的对象没有发生改变, 则反复调用x.equals(y)应该返回同样的结果. 对任意非空引用x, x.equals(null) 返回false;
    Processed: 0.008, SQL: 9