equals()的个人见解

equals()的概述

equals()可以用来判断两个对象是否相等
于是开始翻看Object类中的equals()的源码发现如果不重写的话,被子类继承下去,就是比较两个对象的地址是否相等,即是否是同一个对象。

	public boolean equals(Object obj) {
    
    
		// 判断两个对象的地址是否相等
	    return (this == obj);
	}

重写此方法需要注意其五大特性:

自反性 :对于任何非空的参考值x , x.equals(x)应该返回true 。 
对称性 :对于任何非空引用值x和y , x.equals(y)应该返回true当且仅当y.equals(x)回报true 。 
传递性 :对于任何非空引用值x , y和z ,如果x.equals(y)回报true个y.equals(z)回报true ,然后x.equals(z)应该返回true 。 
一致性 :对于任何非空引用值x和y ,多次调用x.equals(y)始终返回true或始终返回false ,前提是未修改对象上的equals比较中使用的信息。 
非空性 :对于任何非空的参考值x , x.equals(null)应该返回false 。
package test;

import java.util.Objects;

public class demo01 {
    
    

    public static void main(String[] args) {
    
    
        Person p1 = new Person("张三", 18);
        Person p2 = new Person("张三", 18);
        System.out.println("p1.equals(p2): " +  p1.equals(p2));
        System.out.println("p1==p2: " + (p1==p2));
    }

    private static class Person extends Object{
    
    
        private int age;
        private String name;

        public Person() {
    
    
        }

        public Person(String name, int age) {
    
    
            this.age = age;
            this.name = name;
        }

        public int getAge() {
    
    
            return age;
        }

        public void setAge(int age) {
    
    
            this.age = age;
        }

        public String getName() {
    
    
            return name;
        }

        public void setName(String name) {
    
    
            this.name = name;
        }

        @Override
        public boolean equals(Object o) {
    
    
            // 如果是同一个对象则会返回true
            if (this == o) return true;
            // 如果传入的参数是空 或 类型不同则返回false
            // getClass()返回Class类型的对象,
            // 这里是class test.demo01$Person
            if (o == null || getClass() != o.getClass()) return false;
            // 由于是同一个类型我们可以进行强转
            Person person = (Person) o;
            // 最后比较两个属性的内容是否相等
            return age == person.age &&
                    Objects.equals(name, person.name);
        }
    }
}

运行结果:

p1.equals(p2): true
p1==p2: false

猜你喜欢

转载自blog.csdn.net/BrightZhuz/article/details/107896678