Pregunta clásica de la entrevista: ¿Es el número entero c=100, d=100, c==d necesariamente falso?

¡Creo que es posible que todos hayan encontrado ese problema durante la entrevista!

Creo que las respuestas de todos son falsas y verdaderas.

Pero debo decir aquí que esta respuesta no es absoluta. c==d debe ser verdadero, pero a==b puede no ser falso, pero puede ser verdadero.

Pero el valor que obtengo es cierto, cierto. Si no lo cree o tiene preguntas, ¡lea a continuación!

Primero debemos entender por qué las respuestas suelen ser falsas y verdaderas.

El número entero c = 1000 en realidad realiza la operación del número entero c = Integer. El valor es (100). Echemos un vistazo al código fuente de Integer.class

Como se puede ver en el código anterior, cuando I > = IntegerCache.low & amp& amp I & lt cuando = IntegerCache.high, será se recupera directamente de Obtenga el valor de la matriz de caché; de lo contrario, nuevo será un nuevo objeto entero.

Como se puede ver en el código fuente de Integer.class anterior, el valor predeterminado bajo es -128 y el valor alto está relacionado con integerCacheHighPropValue.

Cuando no configuramos el Integercache en la máquina virtual, era 127 y la matriz de caché era de -128 a 127. No es difícil entender por qué.

Las clásicas preguntas de la entrevista mencionadas al principio del artículo pueden tener resultados falsos o verdaderos. La razón por la que enfatizo más adelante no es necesariamente porque cuando ntegerCacheHighPropValue no es nulo, depende de la configuración en jvm.

En eclipse, podemos hacer lo siguiente:

En este momento, si ejecuta ese código nuevamente, obtendrá los resultados verdadero y verdadero. La próxima vez que alguien te haga una pregunta como esta, puedes decirle en voz alta que no es necesariamente cierta.