I. Antecedentes
Código de la especificación: "Ali Baba Java Development Manual" columna detallada acaba de publicar, que "Entero problema de caché de análisis II 02", dice:
Entero var =? Declare número entero, objetos de enteros eventualmente será construido por java.lang.Integer # valueOf (int).
Hay un estudiante presenta un problema cuando i = 255 punto de interrupción, analizado en otro artículo: https://dwz.cn/m1of2kIu
Además, hay un amigo hizo un problema similar:
public static void main(String[] args) {
Integer c = 150;
System.out.println(c==150);
}
Creo que los estudiantes aprendido esta columna puede resolver rápidamente este problema.
En segundo lugar, el análisis del problema
2.1 JLS Dafa
Los JLS encontraron, y el valor entero Entero objeto == cuando se comparan, desembalaje de forma automática, el valor de comparación.
Si
r
es una referencia de tipoInteger
, convertidos de conversión entonces unboxingr
en
r
.intValue()
2.2 Desmontaje Dafa
No pretendemos conocer las disposiciones de los JLS, que pueden ver a través del desmontaje Dafa.
public class com.imooc.basic.learn_int.IntegerTest {
public com.imooc.basic.learn_int.IntegerTest();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: sipush 150
3: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
6: astore_1
7: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
10: aload_1
11: invokevirtual #4 // Method java/lang/Integer.intValue:()I
14: sipush 150
17: if_icmpne 24
20: iconst_1
21: goto 25
24: iconst_0
25: invokevirtual #5 // Method java/io/PrintStream.println:(Z)V
28: return
}
lógica de la base :
Ver donde el número de líneas 17, y el comparador 150 valores enteros intValue, el salto si no es igual a la línea 24,
24 punto de empujar la constante de 0 (0 máquina virtual puede ser representado por falsa), a continuación, llamar parámetros para el tipo booleano declaraciones (Z) imprimir imprimir.
Si son iguales, continuar a la línea 20, la pila constante 1, y luego pide que los estados de impresión parámetro de tipo booleano (Z).
Reverse traducido a código fuente de Java es la siguiente:
public static void main(String[] args) {
Integer c = 150;
if(c.intValue() == 150){
System.out.println(true);
}else{
System.out.println(false);
}
}
Así que la respuesta es muy obvia.
Aquí esperamos que podamos autoaprendizaje "Java Virtual Machine Specification", después de desmontar el código Java puede tener la capacidad de auto-llenado cerebro a cabo la correspondiente .
Lenguaje Java y la máquina virtual Manual oficial para descarga: https://docs.oracle.com/javase/specs/index.html
Si nos fijamos en la difícil Inglés, también puede comprar sus propias traducciones al chino.
método de depuración 2,3 código
Podemos y valueOf el punto de quiebre en el constructor, echar un vistazo a ti mismo de la fuente cuando los parámetros de llamada para llamar a 150 varias veces, se puede observar una sola vez.
Además, también podemos ver el número de enteros en la memoria de objeto 150 se construye.
Puede buscar número entero de pestaña de memoria en la esquina inferior derecha, haga doble clic en los iguales de expresión (150) para ver el valor de un objeto Integer 150, y finalmente encontramos una.
El segundo 150 y por lo tanto no se convierte en un objeto Integer.
Sugieren que se puede dominar este punto de vista de memoria métodos de objeto, cuando no hay tiempo para declarar una variable de referencia no se puede ver a través de la ventana, se puede utilizar este método para verificar .
Cuadro de la sección de código subsiguiente depuración describirá como un puntos de interrupción de excepción, la depuración y la depuración remota más habilidades.
En tercer lugar, el resumen
1 a través de "" manuales "sección detallada 2 participantes a hacer preguntas al punto de interrupción i = 255 problemas resueltos", y esta sección, se pueden encontrar, recordar el conocimiento es fácil de olvidar, pero el método es genérico, sujete el bien común método clásico se puede utilizar para resolver muchos problemas similares.
2 se pueden resolver rápidamente cuando espero que más adelante podemos desarrollar el hábito de analizar problemas, problemas similares se encuentran, en lugar de buscar varios blog, pido otra persona.
Esperanza de que podemos auto-aprender, conocer estos y saber por qué.
3 columna introducirá más habilidades de aprendizaje y solución de problemas, los estudiantes interesados pueden centrarse columna. Enlaces: https://dwz.cn/2GIxxC9n
Artículos relacionados