[Orientado a objetos de Java] Experimento de comparación de objetos

introducción de fondo

El método de igualdad funciona:

equals() se utiliza para comprobar si dos objetos son iguales, es decir, si el contenido de los dos objetos es igual.

  • == tiene diferentes funciones al comparar referencias y comparar tipos de datos primitivos:

Compara tipos de datos primitivos y devuelve verdadero si dos valores son iguales

Mientras que al comparar referencias, si las referencias apuntan al mismo objeto en la memoria, el resultado es verdadero

El método equals() se define en la clase de objeto :

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

entorno de laboratorio

ASUS VivoBook + Windows10 + IntelliJ IDEA 2021.3.2 (Edición comunitaria) + JDK17

contenido experimental

Implemente una clase denominada Value que tenga un miembro x de tipo char y un miembro y de tipo double. Anule (anule) su método equals() para que cuando use equals() para comparar el contenido de dos objetos de la clase Value, la condición de igualdad sea que todos los miembros de los objetos sean correspondientemente iguales.

(1) Experimentar ideas

① Defina el valor de la clase y establezca sus variables miembro (incluidas, entre otras) en la variable de tipo char x y la variable de tipo doble y.

②El método equals originalmente compara las direcciones de referencia, y ahora necesita comparar los contenidos de acuerdo con las variables miembro en los contenidos de las dos clases.Para el objeto de la clase Value, debe compararse con otros objetos de la clase Value. Por lo tanto, el valor de retorno del método reescrito es booleano, el nombre del método se reserva como igual y la lista de parámetros es el objeto de clase Value b. Utilice el operador de comparación "==" y la palabra clave "this" para juzgar las variables miembro de las dos clases. Si se cumple, devolverá verdadero, y si no se cumple, devolverá falso.

③ Al agregar un constructor parametrizado, las variables miembro x e y de la clase Value se pueden inicializar.

④ Defina el método principal en la clase y cree una instancia para comparar.

(2) Código fuente del experimento

Clase de valor:

public class Value {
    char x;
    double y;
    boolean equals(Value b) {
        return (this.x == b.x) && (this.y == b.y);
    }

    Value(char m,double n){
        this.x=m;
        this.y=n;
    }

    public static void main(String[] args) {
        Value classOne = new Value('x',2.5);
        Value classTwo = new Value('x',2.5);
        System.out.println(classOne.equals(classTwo));
    }
}

(3) Captura de pantalla del experimento

(4) experiencia experimental

Hay dos dificultades en esta pregunta.

La primera dificultad radica en la reescritura del juicio del método de igualdad. Necesitamos comparar el contenido de las clases comparando las variables miembro. "==" en sí mismo no se puede usar para comparar el contenido de los objetos de referencia, pero para los tipos básicos char y double, "==" puede realizar comparaciones de contenido. Por lo tanto, en el método de igualdad, usamos "==" para comparar el contenido del tipo básico y luego realizamos la comparación de instancias de la clase.

La segunda dificultad es la creación de instancias. Si especificamos el valor de las variables miembro al crear una clase, pierde el significado de comparación. Al crear un constructor, el usuario puede ingresar los valores de las variables miembro de dos instancias de la clase Value por sí mismo, lo que puede ayudarnos mejor a verificar la corrección del programa.

(5) Puntos clave del experimento

Aquí están involucrados tres puntos de conocimiento, reescribir, juzgar la clase de la instancia y abatir.

La anulación consiste en definir métodos en la subclase con el mismo nombre de método, tipo de devolución y lista de parámetros que la clase principal, pero el proceso de implementación del método es diferente. Lo que debe prestarse especial atención aquí es que la autoridad de acceso del método reescrito en la subclase solo se puede aumentar pero no disminuir.La autoridad de acceso del método equals en la clase Object es pública, por lo que la autoridad de acceso del método equals reescrito en Valuez solo puede ser público.

Para juzgar si la clase de la instancia es Valor, use obj.getClass()==this.getClass() para juzgar en el programa de este experimento, y también puede usar obj instancia de Valor para juzgar.

Solo los objetos que se han elevado primero pueden continuar con la reducción. Si el objeto al que hace referencia la clase principal es la clase principal en sí, no es seguro durante el proceso de downcasting y no habrá ningún error en la compilación, pero se producirá un error java.lang.ClassCastException durante el tiempo de ejecución.

(Extracto del blogger de CSDN "CN_BIT", enlace: https://blog.csdn.net/CN_BIT/article/details/108778669 )

Supongo que te gusta

Origin blog.csdn.net/ayaishere_/article/details/128711820
Recomendado
Clasificación