miércoles, 1 de febrero de 2012

PUNTEROS JAVA

¿Cual es el comportamiento  de Java  en la memoria cuando se utilizan referencias o  se instancia una clase en un  objeto?

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.