java基础中的 equals关键字 重写

Posted 王林飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础中的 equals关键字 重写相关的知识,希望对你有一定的参考价值。

equals (public boolean equals(Object obj))

       指示其他某个对象是否与此对象“相等”。

equals 方法在非空对象引用上实现相等关系:

  • 自反性:对于任何非空引用值 xx.equals(x) 都应返回 true
  • 对称性:对于任何非空引用值 xy,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true
  • 传递性:对于任何非空引用值 xyz,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true
  • 一致性:对于任何非空引用值 xy,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
  • 对于任何非空引用值 xx.equals(null) 都应返回 false

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 xy,当且仅当 xy 引用同一个对象时,此方法才返回 truex == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

 参数:

obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false
举个例子: 
package toString;

public class RabbitEqualsTest {
     public String name;
     public String furcolor;
     public int age;
     //构造RabbitEqualsTest   重载
     public RabbitEqualsTest(int i){
         super();
         this.age=i;
     }
      public RabbitEqualsTest(String name, String furcolor, int age) {
        super();
        this.name = name;
        this.furcolor = furcolor;
        this.age = age;
    }
    
    //equals方法重写
    public boolean equals (Object obj){
        if(obj==null) {
            return false;
        }else{
            if(obj instanceof RabbitEqualsTest){
                RabbitEqualsTest rabbit = (RabbitEqualsTest)obj;  //将obj强制转换为RabbitEqualsTest
                if(this.age==rabbit.age
                        &&this.name==rabbit.name
                        &&this.furcolor==rabbit.furcolor){
                    return true;
                }
            }
        }
     return false;
     }
}
package toString;
public class RabbitEqualsMain {

public static void main(String[] args) { //实例化RabbitEqualsTest RabbitEqualsTest r1= new RabbitEqualsTest("小灰","白色",3); RabbitEqualsTest r2= new RabbitEqualsTest("小灰","白色",3); RabbitEqualsTest r3= new RabbitEqualsTest(4); System.out.println(r1==r2); System.out.println(r1.equals(r2)); } }

结果为:false   true



以上是关于java基础中的 equals关键字 重写的主要内容,如果未能解决你的问题,请参考以下文章

Java基础面试题

java基础重写equals()方法的同时要重写hashCode()方法

Java 基础 - 如何重写equals()

Java基础知识

Eclipse4.7使用基础 快捷键 重写子类中的equals方法

java 集合中重写hashCode方法和重写equals方法啥关系?