¿Cuál es la comparación entre iguales y ==?
1. Booleano tem = a == b;
En primer lugar, == La comparación es definitivamente la dirección. Desde la perspectiva de la pila, es decir, == La comparación es el contenido de la pila. Debido a que la pila se usa para almacenar los valores literal de las variables automáticas en los ocho tipos básicos en Java (las variables automáticas son variables definidas en forma de int a = 1;). Si se trata de un valor de comparación de variable automática, definitivamente se usa para compararlo con ==, porque iguales () es un método, por lo que debe llamarse por un objeto que se use para comparar. Las variables automáticas no son instancias de clases ni referencias de clases, por lo que no se puede utilizar el método igual ().
2. boolean tem = a.equals ("b");
El método igual () generalmente se usa para comparar el contenido de un objeto, pero en algunos casos también compara las direcciones de dos objetos.
Próximo
Escribe un programa de prueba
paquete com; import java.util.Date; prueba de clase pública {public static void main (string [] args) {Integer Integer1 = new Integer (1); Entero entero2 = nuevo entero (1); Cadena str1 = nueva cadena ("123"); Cadena str2 = nueva cadena ("123"); Fecha fecha1 = nueva fecha (); Fecha fecha2 = nueva fecha (); Doble double1 = new Double ("1.0"); Double double2 = new Double ("1.0"); Booleano tem1 = nuevo booleano (verdadero); Booleano tem2 = nuevo booleano (verdadero); Objeto objeto1 = nuevo objeto (); Objeto objeto2 = nuevo objeto (); System.out.println ("---- Object -------"); System.out.println (object1.equals (object2)); System.out.println (object1 == Object2); System.out.println (object1.equals (object1)); System.out.println (object1 == Object1); System.out.println ("-----------"); System.out.println (TEM1.Equals (TEM2)); System.out.println (TEM1 == TEM2); System.out.println ("--- doble --------"); System.out.println (double1.equals (double2)); System.out.println (double1 == double2); System.out.println ("---- entero -------"); System.out.println (integer1.equals (integer2)); System.out.println (integer1 == Integer2); System.out.println ("-----------"); System.out.println (str1.equals (str2)); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println ("-----------"); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println (date1.equals (date2)); System.out.println (date1 == date2); }}resultado:
---Objeto-----
FALSO
FALSO
verdadero
verdadero
--- booleano -----
verdadero
FALSO
---Doble-----
verdadero
FALSO
---Entero-----
verdadero
FALSO
---Cadena-----
verdadero
FALSO
---Fecha-----
verdadero
FALSO
Primero, cuando los dos objetos comparados son los mismos, los resultados de == e igual () son verdaderos, y cuando los dos objetos son diferentes, se devuelven falsos. Entonces, cuando == y iguales se usan para comparar objetos, comparan la dirección del objeto, pero de hecho la esencia es la misma. Aquí está el código del método igual () en la clase de objeto:
public boolean iguales (objeto obj) {return (this == obj); }Para booleano, doble (flotante), interger (disparo, largo), cadena y fecha, también encontré sus códigos fuente. A continuación publiqué los códigos de origen del método Equals () en booleano, doble, interger, cadena y fecha. En este momento, el método Equals () se reescribió porque estas clases se heredan de la clase de objeto.
Booleano:
public boolean iguales (object obj) {if (obj instancia de boolean) {value de retorno == ((boolean) obj) .BooleanValue (); } return false; }Doble:
Public boolean iguales (object obj) {return (obj instancia de double) && (dobletolongbits (((doble) obj) .value) == DoubleTolongBits (valor)); }Interger:
public boolean iguales (object obj) {if (obj instanceOf integer) {return value == ((integer) obj) .intValue (); } return false; } Cadena:
public boolean igual (objeto anobject) {if (this == anobject) {return true; } if (anobject instanceOf string) {string anotherstring = (string) anobject; int n = value.length; if (n == anotherstring.value.length) {char v1 [] = valor; char v2 [] = anotherstring.value; int i = 0; while (n--! = 0) {if (v1 [i]! = v2 [i]) return false; i ++; } return verdadero; }} return false; }Fecha:
public boolean iguales (object obj) {return obj instanceOf date && gettime () == ((date) obj) .getTime (); }En otras palabras, en estos tiempos, el método igual () de la clase de objeto se reescribe para comparar el contenido real de dos objetos y ya no la dirección. Por supuesto, definitivamente no son solo estos. Aquí hay solo algunos casos comunes en los que las clases nativas de Java reescriben el método igual () de la clase de objeto.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!