tipos tamaño referencia primitivas objeto ejemplos datos java integer

tamaño - variables de referencia en java



Comparación entre variables que apuntan a un mismo objeto Integer (3)

Ese es el artefacto del autoboxing y el hecho de que Integer es inmutable en Java.

El a++ y a-- se traducen aproximadamente a esto.

int intA = a.getInt( ); intA++; a = Integer.valueOf( intA ); // this is a reference different from b

La salida del programa actual es "Extraño". Pero ambas variables comparten la misma referencia. ¿Por qué las comparaciones segunda y tercera no son ciertas?

Integer a; Integer b; a = new Integer(2); b = a; if(b == a) { System.out.println("Strange"); } a++; if(b == a) { System.out.println("Stranger"); } a--; if(b == a) { System.out.println("Strangest"); }

Salida: Strange


Un objeto Integer es inmutable, cualquier cambio en un objeto existente creará un nuevo objeto. Entonces, después de a++ , se creará un nuevo objeto y empezará a apuntar a ese nuevo objeto, mientras que b sigue apuntando al objeto anterior. Por lo tanto, después de a++ , a y b apuntan a diferentes objetos y a == b siempre devolverá false.

Con respecto al ejemplo mencionado:

Integer a; //created Integer reference Integer b; //created Integer reference a = new Integer(2);//created new Integer Object and a reference is assigned to that new object b = a;//b also start pointing to same Integer object if(b == a) { // b==a will be true as both are pointing to same object System.out.println("Strange"); } a++; //after a++ , a new Integer object will be created (due to Integer immutablity and a will point to that new object while b is still pointing to old), so b==a will be false if(b == a) { System.out.println("Stranger"); } a--; //again a new Integer Object will be created and now a will start pointing to that new Object , so b==a will be false if(b == a) { System.out.println("Strangest"); }


  • Strage - es obvio, las dos variables apuntan al mismo objeto

  • No Stranger por autoboxing. Integer es inmutable, por lo que cada operación crea una nueva instancia.

  • No es Strangest , debido al punto anterior, y porque ha usado un new Integer(..) que ignora el caché que se usa para el rango de bytes. Si usa Integer.valueOf(2) inicialmente, se usarán los Integer s en caché y también se imprimirá Strangest .