Referencias en Java

Hola a todos, hoy os explicare que son y como debemos usar correctamente las referencias en Java.

Cuando creamos un objeto con new, estamos creando una referencia, esta indica donde está el objeto en memoria. Podemos asignar una referencia a otro objeto. Veamos un ejemplo con arrays:

public class PruebaApp {

	public static void main(String[] args) {

		//Definimos un array con 10 posiciones
		int array1[]=new int [10];
		array1[0]=3;

		//El array no esta creado, con null indicamos que no apunta a nada.
		int array2[]=null;

		//copiamos la referencia, array1 y array2 apuntan al mismo array
		array2=array1;

		//Creamos una nueva referencia, array apunta a un array diferente no al que hemos creado al principio
		array1=new int[20];

		//array2 es el unico que apunta al primer array creado, podemos acceder a su contendo
		System.out.println("El primer valor del array2 es "+array2[0]);

		//Ahora, array1 tiene otro valor que el asignado despues de crearlo
		System.out.println("El primer valor del array1 es "+array1[0]);
	}

}

Como vemos en el ejemplo anterior, hay una nueva palabra, null, sirve para indicar que no apunta nada para que el recolector de basura limpie la memoria de aquello que no es necesario. Si lo queremos invocar manualmente a este recolector, usamos System.gc();

Null también nos sirve para comprobar, por ejemplo, si un objeto apunta a alguna dirección de memoria, esto suele ser útil en varios casos.

Las referencias se pueden comparar con el operador lógico == o !=, si dos referencias son iguales es que apuntan a la misma zona de memoria. Por ejemplo:

public class PruebaApp {

	public static void main(String[] args) {

		//Definimos un array con 10 posiciones
		int array1[]=new int [10];
		array1[0]=3;

		//El array no esta creado, con null indicamos que no apunta a nada.
		int array2[]=null;

		//copiamos la referencia, array1 y array2 apuntan al mismo array
		array2=array1;

		//Comparamos referencias
		if (array1==array2){
			System.out.println("Los arrays apuntan a la misma dirección");
		}

		//Creamos una nueva referencia, array apunta a un array diferente no al que hemos creado al principio
		array1=new int[20];

		//Comparamos referencias
		if(array1!=array2){
			System.out.println("Los arrays apuntan a distintas direcciones");
		}
	}

}

Para objetos de nuestras propias clases la referencia funciona igual.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

6 comentarios

  1. Warrior

    Mmm todo eso me recuerda a las moificaciones que hago en la plantill de mi blog, aunque ps sigo tutoriales, la verad no tengo la idea correcta de que estoy haciendo XD.

    Tiene que ver?

    Saludos Traffic CLub.

  2. Disco Duro de Roer Post author

    Creo que te confundes con javascript, es totalmente distinto

  3. Willy

    Según entiendo lo que hace es solo una referencia y no una copia como tal que reserve su propio espacio en memoria, esto es correcto?

  4. Disco Duro de Roer Post author

    Es correcto

  5. Alin Javier

    Creo que mas claro no puede ser.

Deja una respuesta

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