Opinión personal de iguales ()

Resumen de iguales ()

equals () se puede usar para determinar si dos objetos son iguales,
así que comience a mirar el código fuente de equals () en la clase Object y descubra que si no se reescribe, es heredado por la subclase, que es para comparar si las direcciones de los dos objetos son iguales, es decir, si es el mismo objeto.

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

Reescribir este método debe prestar atención a sus cinco características:

自反性 :对于任何非空的参考值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);
        }
    }
}

resultado de la operación:

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

Supongo que te gusta

Origin blog.csdn.net/BrightZhuz/article/details/107896678
Recomendado
Clasificación