Menú Curso Java Básico : Asignación de Valores

(Anterior) Operadores, Errores y Datos de Entrada/"Streams".
En base a su ambiente, abra un Editor de Textos para generar el siguiente ejemplo.

Código Fuente Asignacion.java

 
class Numero {
    int i;
}

public class Asignacion {

    public static void main(String[] args) {

	Numero n1 = new Numero();
	Numero n2 = new Numero();
	n1.i = 15;
	n2.i = 45;
	System.out.println("a) n1.i: " + n1.i +
			   ", n2.i: " + n2.i);
	n1 = n2;
	System.out.println("b) n1.i: " + n1.i +
			   ", n2.i: " + n2.i);
	n1.i = 27;
	System.out.println("c) n1.i: " + n1.i +
			   ", n2.i: " + n2.i);
    }
}

Clase Asignacion

  • En el código fuente son definidas dos Clases, una de ellas (Numero) simplemente contiene un campo, mientras la segunda (Asignacion) incluye la lógica central del programa.

  • Dentro del método principal (main) de la Clase principal (Asignacion) es definida la siguiente secuencia de eventos:

    • Primeramente se generan dos instancias de la Clase Numero a las cuales son asignadas las referencias n1 y n2.
    • A través de dichas referencias son asignados los valores correspondientes al campo i de la Clase.
    • Se imprime a pantalla el valor de cada campo de las dos instancias.
    • Se asigna el valor de n2 a la instancia de n1.
    • Se imprime a pantalla el valor de cada campo de las dos instancias.
    • Se modifica el valor del campo en la instancia n1 al valor de 27.
    • Se imprime a pantalla el valor de cada campo de las dos instancias.

Aunque el comportamiento del programa anterior parece predecible, para muchas personas no familiarizadas con lenguajes orientados a Objetos puede resultar una sorpresa, la ejecución del programa anterior da como resultado:

 
a) n1.i: 15, n2.i: 45
b) n1.i: 45, n2.i: 45
c) n1.i: 27, n2.i: 27

Los primeros resultados no presentan sorpresa alguna, puesto que simplemente se imprimen los valores recién asignados; la segunda impresión puede resultar confusa y esto se debe a la asignación n1 = n2.

Al utilizar la sintaxis n1 = n2, se esta indicando que la referencia n1 apunte hacia aquella de n2; al ser llevada acabo esta asignación el valor n1.i cambia efectivamente hacia el mismo de n2.i. El comportamiento anterior se debe a que fueron utilizadas referencias en la asignación de valores, la instancia de n1 fue efectivamente perdida, a partir de ese punto ambas referencias apuntan hacia la instancia del Objeto n2; este mecanismo en Java es denominado aliasing y suele ser un poco difícil de entender para aquellos que inician en este lenguaje.

La tercer impresión es llevada acabo después de la asignación n1.i = 27, al llevar acabo este proceso el valor n1.i será modificado, así como el valor de n2.i, puesto que ambas referencias apuntan hacia la misma instancia.

Para evitar aliasing y mantener las dos instancias de Objetos se utilizaría una asignación más explicita : n1.i = n2.i; en la siguiente sección se observará un comportamiento de equivalencia que también puede resultar inusual para un programador no familiarizado con el lenguaje Java.

Terminos Legales de Contenido ©2000-2008 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com