No, no debe:
Integer i1 = 128;
Integer j1 = 128;
Autoboxing hace que dos objetos Integer distintas a crearse en la implementación de Java que está utilizando.
Si los valores enteros estaban en el rango de -128 a 127, el JLS indica que se usaría el mismo objeto entero; ver JLS 1.5.7. Sin embargo, el JLS hace no requiere que i1
y i2
deben tener valores diferentes fuera de ese rango. De hecho, la siguiente discusión en el JLS dice esto:
Idealmente, encajonar un valor primitivo dado p, 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 suposiciones sobre la identidad de los valores encuadrados por el programador. Esto permitiría (pero no requeriría) compartir algunas o todas estas referencias.
Esto asegura que en la mayoría de los casos comunes, 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 los caracteres y cortos, así como enteros y largos en el rango de -32K - + 32K.
una pregunta tan específica, hmm, sospechoso – Will
@Will He visto la misma pregunta en un libro SCJP –
apuesto a que devuelve falso, verdadero, falso, verdadero en lugar de verdadero, verdadero, falso, verdadero –