Acerca de la comparación del método "==" y "equals ()"

1) Para ==, compare si los valores son iguales

  • Si es un tipo de datos básico, se compara si el "valor" almacenado es igual en tamaño;

  • Si actúa sobre una variable de tipo de referencia, se compara la dirección del objeto señalado

2) Para el método equals, tenga en cuenta que el método equals no se puede aplicar a variables de tipos de datos básicos. Equals hereda la clase Object y compara si es el mismo objeto. El
método equitativo () no escrito:

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

Si el método igual no se reescribe, se compara la dirección del objeto señalado por la variable del tipo de referencia;

Si clases como String y Date reescriben el método igual, se compara el contenido del objeto señalado.
    
Veamos un pequeño programa:

package test;

public class student{
    String name;
    int age;
    boolean sex;

    @Override
    public boolean equals(Object obj) {
        if(this == obj){
            return true;
        }
        if(obj instanceof student){
            student student=(student)obj;
            if(this.name.equals(student.name)&&this.age==student.age&&this.sex == student.sex){
                return true;
            }
        }
        return false;
    }
}
package test;

public class test {
    public static void main(String[] args) {
        student p1 = new student();
        p1.name="a";
        p1.age=10;
        p1.sex=false;

        student p2 = new student();
        p2.name="a";
        p2.age=10;
        p2.sex=false;
        System.out.println(p1.equals(p2));
    }
}

Resultado de salida: verdadero , aquí comparamos los tres valores de atributo del alumno reescribiendo equals (), siempre que los tres atributos sean iguales, creemos que los dos objetos son iguales, si no se reescriben, entonces igual () juzga la memoria del objeto El valor de la dirección obviamente no cumple con nuestros requisitos. Veamos el
diagrama de memoria simple:

Inserte la descripción de la imagen aquí
Mientras no sean el mismo objeto, las direcciones que almacenan en la memoria deben ser inconsistentes, incluso si todos sus atributos son iguales, por lo que generalmente tenemos que reescribir equals () al comparar objetos; de lo contrario, la comparación no tiene sentido.

Publicado 39 artículos originales · ganado elogios 1 · vistas 4620

Supongo que te gusta

Origin blog.csdn.net/thetimelyrain/article/details/99697654
Recomendado
Clasificación