Bueno Bloggeros, estamos aquí para aclarar dudas sobre las referencias ( punteros) en memoria cuando declaramos variables, instanciamos clases, repetimos objetos con mismos contenidos que otro (que no es lo mismo que hacer un clone) y demás javaderías que siempre nos meten por la calle de la amargura hasta el punto de que al final pasamos del tema olimpicamente hasta que la liamos.
¿Que se cuece en la memoria?
Vamos a empezar con los objetos String, crearemos uno directo y otro con new.
String Str1 = "abc" ;
String Str2 = new String ("abc");
Que ocurre; Java crea dos zona de memoria totalmente distintas para el primer caso que para el segundo. El primer caso se crea una zona de memoria para las asignaciones directas en cambio para la segunda estamos utilizando la memoria normal donde se crean los objetos.
Con lo que:
if (Str1.equals(Str2)) // Es verdadero
if(Str1= = Str2); // Es falso
El equal compara el contenido del objeto al que apunta la variable Str1 con el contenido del objeto al que apunta Str2 y será verdadero porque las dos variables apuntan a objetos (que aunque son diferentes) cuyo contenido son iguales "abc" .
El = = hace una comparación del contenido de la variables Str1 y Str2 y ¿Que es lo que contienen ? direcciones de memoria y como antes hemos dicho en este caso Java crea los objetos en diferentes zonas.
