|
|
No es necesario destruir ( borrar ) un objeto
creado dinámicamente como en otros lenguajes, basta con
igualar el puntero a dicho objeto a null (palabra reservada
que significa objeto nulo) para que el intérprete del Java
se encargue de eliminar el espacio de memoria que usa el objeto
( siempre y cuando no existan otros punteros apuntando a esa instancia
), o simplemente asignar un objeto a otra instancia, con lo cual
se dejaría un bloque de memoria que no tiene referencias.
Al pasar un objeto como parámetro este
se pasa por referencia, esto quiere decir que si dentro del método
se cambia el valor del parámetro, el valor del objeto que
se usó para pasar ese parámetro también cambiará.
Una diferencia significativa entre un puntero
en Java con un puntero en otro lenguaje convencional es que no
se puede cambiar de forma directa la dirección de memoria
(instancia) a la que apunta un puntero como sucede en C:
Ejemplo:
int *puntero;
......
puntero++; // puntero apunta al siguiente entero
en la RAM.
La única forma de hacer que un puntero haga referencia a otra posición de memoria (instancia) es asignarlo a un objeto creado con la sentencia new o usando el operador = y asignar otra área de memoria a dicho objeto.
Ejemplo:
String cadena1=new String("Hola Mundo");
String cadena2=new String("Esta es una cadena con siete palabras");
........
cadena1=cadena2;
En este caso el objeto cadena1 que tiene una
referencia a una instancia de la clase String que contiene la
cadena "Hola Mundo" es asignado a una instancia de String
que contiene la cadena "Esta es una cadena con siete palabras",
quedando liberada la memoria ocupada por la primera instancia
de String que estaba asignada al objeto cadena1, después
de la asignación los dos objetos cadena1 y cadena2 apuntan
(hacen referencia) a la misma instancia de la clase String que
contiene la cadena "Esta es una cadena con siete palabras".