"Manual" detallado análisis de problemas 150 participantes a hacer preguntas de la Sección 2 ==

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 tipo  Integer, convertidos de conversión entonces unboxing  r 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

1 Entero Análisis Cache

2 "manuales" preguntas detalladas de la Sección 2 puntos de interrupción I = 255 estudiantes a resolver problemas 

 

 

 

发布了379 篇原创文章 · 获赞 862 · 访问量 132万+

Supongo que te gusta

Origin blog.csdn.net/w605283073/article/details/103003854
Recomendado
Clasificación