que pasos para interfaz grafica ejemplos crear componente caracteristicas java caching integer

java - pasos - swing containers



Los objetos de envoltura entera comparten las mismas instancias solo dentro del valor 127? (5)

Aquí están la misma instancia:

Integer integer1 = 127; Integer integer2 = 127; System.out.println(integer1 == integer2); // outputs "true"

Pero aquí son instancias diferentes:

Integer integer1 = 128; Integer integer2 = 128; System.out.println(integer1 == integer2); // outputs "false"

¿Por qué los objetos contenedores comparten la misma instancia solo dentro del valor 127?


Además de las otras respuestas, quiero agregar que == compara solo las referencias de objeto. Utilice .equals() lugar:

Integer integer1=128; Integer integer2=128; if(integer1.equals(integer2)) System.out.println(true); else System.out.println(false);


La fuente de java.lang.Integer:

public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); }

¡Aclamaciones!


Por cierto, puedes acortar tu código a

System.out.println("Integer 127 == " + ((Integer) 127 == (Integer) 127)); System.out.println("Integer 128 == " + ((Integer) 128 == (Integer) 128)); for(int i=0;i<5;i++) { System.out.println( "Integer 127 system hash code " + System.identityHashCode((Integer) 127) + ", Integer 128 system hash code "+System.identityHashCode((Integer) 128)); }

huellas dactilares

Integer 127 == true Integer 128 == false Integer 127 system hash code 1787303145, Integer 128 system hash code 202703779 Integer 127 system hash code 1787303145, Integer 128 system hash code 1584673689 Integer 127 system hash code 1787303145, Integer 128 system hash code 518500929 Integer 127 system hash code 1787303145, Integer 128 system hash code 753416466 Integer 127 system hash code 1787303145, Integer 128 system hash code 1106961350

Puede ver que 127 es el mismo objeto cada vez, mientras que el objeto para 128 es diferente.


Porque está especificado por la especificación del lenguaje Java.

JLS 5.1.7 Conversión del boxeo :

Si el valor p se va a encasillar es true , false , un byte o un char entre el rango de /u0000 a /u007f , o un número /u007f o short entre -128 y 127 (inclusive), entonces r 1 y r 2 sean los resultados de dos conversiones de boxeo de p . Siempre es el caso que r 1 == r 2 .

Idealmente, encajonar un valor primitivo p dado, siempre arrojaría una referencia idéntica. En la práctica, esto puede no ser factible utilizando las técnicas de implementación existentes. Las reglas anteriores son un compromiso pragmático. La cláusula final anterior requiere que ciertos valores comunes siempre estén enmarcados en objetos indistinguibles. La implementación puede almacenarlos en caché, de forma perezosa o ansiosa. Para otros valores, esta formulación no permite ninguna suposición sobre la identidad de los valores encuadrados por parte del programador. Esto permitiría (pero no requeriría) compartir algunas o todas estas referencias.

Esto garantiza que, en la mayoría de los casos, el comportamiento será el deseado, sin imponer una penalización de rendimiento excesiva, especialmente en dispositivos pequeños. Las implementaciones menos limitadas de memoria podrían, por ejemplo, almacenar en caché todos short valores de char y short , así como los valores int y long en el rango de -32K a +32K.