java - puede - tipos de variables en programacion c++
¿Por qué es== verdadero para algunos objetos Integer? (4)
Aquí, en este caso, el Integer i
y el Integer j
contienen los valores enteros que están en el rango de enteros, el rango de un Integer
es -128 to 128
, y el Integer n
y el Integer m
exceden el rango de Integer
Posible duplicado:
¿Los objetos de envoltura de enteros comparten las mismas instancias solo dentro del valor 127?
He copiado el siguiente fragmento de programa del Khalid Mughal SCJP, pero no puedo
entender la salida.
public class RQ200_60 {
public static void main(String[] args) {
Integer i = -10;
Integer j = -10;
System.out.print(i==j); // output: true -- why true?
System.out.print(i.equals(j)); // output: true
Integer n = 128;
Integer m = 128;
System.out.print(n==m); // output: false
System.out.print(n.equals(m)); // output: true
}
}
El programa anterior dio una salida verdadera para la primera declaración de impresión, pero se supone que da falsa porque es una comparación de referencia con el operador relacional ==. Pero la tercera impresión da falso y no entiendo esta inconsistencia.
Las explicaciones son muy apreciadas!
En el primer caso, tanto los objetos i
como j
apuntan al mismo objeto en caché. De forma predeterminada, el rango entre -128 y 127 se almacena en caché como objeto Integer
. Podemos aumentar el rango utilizando JVM arguments
Las respuestas sobre el almacenamiento en caché son correctas. Sin embargo, si vas ...
Integer i = new Integer(10);
Integer j = new Integer(10);
... entonces evita el almacenamiento en caché y los resultados serán los que esperaba.
Los objetos enteros se pueden almacenar en caché para aquellos que representan un valor cercano a 0. (La especificación de la implementación puede proporcionarle algunos detalles). Esto es presumiblemente para ahorrar memoria (los valores cercanos a 0 son comunes, y desperdiciaría mucha memoria para crear un nuevo objeto para cada variable con el mismo valor).
==
comprueba si dos cosas son el mismo objeto; puede o no tener el mismo objeto Integer para cualesquiera dos variables dadas con el mismo valor. Se supone que no debes verificar con ==
porque no debes preocuparte si es el mismo objeto; es el valor de un Integer
que importa, no su identidad.