in

identidad – ¿Cuál es la diferencia entre == y equals () en Java?

apple touch icon@2

La diferencia entre == e iguales me confundió durante algún tiempo hasta que decidí echarle un vistazo más de cerca. Muchos de ellos dicen que para comparar cadenas debes usar equals y no ==. Espero que en esta respuesta pueda decir la diferencia.

La mejor manera de responder a esta pregunta será haciéndose algunas preguntas a sí mismo. así que comencemos:

¿Cuál es el resultado del siguiente programa?

String mango = "mango";
String mango2 = "mango";
System.out.println(mango != mango2);
System.out.println(mango == mango2);

si usted dice,

false
true

Yo diré que eres Derecha pero Por qué dijiste eso? y si dices que la salida es,

true
false

Yo diré que eres incorrecto pero todavía te preguntaré, ¿por qué crees que es correcto?

Ok, intentemos responder a esta:

¿Cuál es el resultado del siguiente programa?

String mango = "mango";
String mango3 = new String("mango");
System.out.println(mango != mango3);
System.out.println(mango == mango3);

Ahora si dices

false
true

Yo diré que eres incorrecto pero ¿Por qué está mal ahora?? la salida correcta para este programa es

true
false

Compare el programa anterior e intente pensar en ello.

Está bien. Ahora, esto podría ayudar (lea esto: imprima la dirección del objeto; no es posible, pero aún podemos usarlo).

String mango = "mango";
String mango2 = "mango";
String mango3 = new String("mango");
System.out.println(mango != mango2);
System.out.println(mango == mango2);
System.out.println(mango3 != mango2);
System.out.println(mango3 == mango2);
// mango2 = "mang";
System.out.println(mango+" "+ mango2);
System.out.println(mango != mango2);
System.out.println(mango == mango2);

System.out.println(System.identityHashCode(mango));
System.out.println(System.identityHashCode(mango2));
System.out.println(System.identityHashCode(mango3));

¿Puedes simplemente intentar pensar en la salida de las últimas tres líneas en el código anterior? Para mí, ideone imprimió esto (puedes consultar el código aquí):

false
true
true
false
mango mango
false
true
17225372
17225372
5433634

¡Oh! Ahora ves el identityHashCode (mango) es igual a identityHashCode (mango2) Pero no es igual a identityHashCode (mango3)

Aunque todas las variables de cadena (mango, mango2 y mango3) tienen la mismo valor, que es «mango», identityHashCode() todavía no es igual para todos.

Ahora intenta descomentar esta línea // mango2 = "mang"; y ejecútalo de nuevo, esta vez verás los tres identityHashCode() son diferentes. Mmm, esa es una pista útil

sabemos que si hashcode(x)=N y hashcode(y)=N => x is equal to y

No estoy seguro de cómo funciona Java internamente, pero supongo que esto es lo que sucedió cuando dije:

mango = "mango";

java creó una cadena "mango" que fue señalado (referenciado) por la variable mango algo como esto

mango ----> "mango"

Ahora en la siguiente línea cuando dije:

mango2 = "mango";

De hecho, reutilizó la misma cadena. "mango" que se parece a esto

mango ----> "mango" <---- mango2

Tanto mango como mango2 apuntando a la misma referencia Ahora que dije

mango3 = new String("mango")

De hecho, creó una referencia (cadena) completamente nueva para «mango». que se parece a esto,

mango -----> "mango" <------ mango2

mango3 ------> "mango"

y es por eso que cuando publico los valores de mango == mango2, se apagó true. y cuando pongo el valor de mango3 == mango2, se apagó false (incluso cuando los valores eran los mismos).

y cuando descomentaste la linea // mango2 = "mang";
De hecho, creó una cadena «mang» que convirtió nuestro gráfico de esta manera:

mango ---->"mango"
mango2 ----> "mang"
mango3 -----> "mango"

Es por eso que el identityHashCode no es el mismo para todos.

Espero que esto les ayude, chicos. En realidad, quería generar un caso de prueba donde == falla y es igual a () pasa. No dude en comentar y dejarme saber si me equivoco.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

SOAP – Estructura del mensaje

NA7ZSCB4qEzKcrVd6fiQUf 1200 80

Se ha extendido el período de demostración de Stranger in Paradise: Final Fantasy Origin