Asignación de Valores

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

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.

Menú Curso

Objetos, Java y JDK

Composición, Clases y Librerías("Packages").

Variables, Constructores, Métodos y Comentarios.

Herencias ("Inheritance"), Condicionales y Ciclos

Operadores, Errores y Datos de Entrada/"Streams".

Interfases, Arreglos y Polimorfismo.

Collections Framework, "Threads", Garbage Collection y "Assertions".

Java 5 / JDK 5 .

Instalación Software.

Codigo.