Entero e Int

Blog de
referencia 1 Blog de
referencia 2

1. La diferencia entre Integer e int

  1. Integer es una clase de empaquetado de int, int es uno de los ocho tipos de datos básicos
  2. Integer es una clase, el valor predeterminado es nulo, el valor predeterminado int es 0
  3. Integer representa un objeto y usa una referencia para apuntar a este objeto, mientras que int es un tipo de datos básico que almacena valores directamente

2. Empaquetado y desempaquetado automáticos de enteros El desempaquetado y empaquetado
automáticos son funciones posteriores a jdk1.5. El
boxeo es el proceso de encapsular tipos de datos básicos en clases, y el desempaquetado es lo opuesto.
Boxing:
el objeto de la clase de creación normal es nuevo, pero la clase Integer puede ser directamente

Integer a=11;

A través de la herramienta de descompilación, podemos ver que el archivo de clase es así

Integer a = Integer.valueOf(11);

11 es el tipo de datos de base, que se analiza en la clase Integer.
Unboxing:

int m=a;

Archivo de clase descompilado

int m=a.intValue();

3. Acerca de "==" y es igual a ()

En la clase Integer, "==" se usa para comparar si las direcciones de los objetos son iguales, y la clase Integer anula el método equals (Object obj). En el método equals (Object obj), primero determinará si el objeto obj en el parámetro es un entero Si es un objeto del tipo, se juzga si el valor es el mismo, el valor es el mismo, devuelve verdadero, el valor es diferente, devuelve falso, si obj no es un objeto de la clase Integer, devuelve falso. Debe tenerse en cuenta que cuando el parámetro es del tipo básico int, el compilador colocará automáticamente el int en una clase Integer y luego comparará.
Ver codigo

public static void main(String[] args) {
    
     
   Integer i = 10;  
   Integer j = 10;   
   System.out.println(i == j);         
   Integer a = 128;
   Integer b = 128;   
   System.out.println(a == b);        
    int k = 10;    
    System.out.println(k == i);    
    int t = 128;    
    System.out.println(t == a);         
    Integer m = new Integer(10);   
    Integer n = new Integer(10);    
    System.out.println(m == n);
}

Primero, declare directamente Integer i = 10, se incluirá automáticamente en Integer i = Integer.valueOf (10);
cuando se comparan k e i, Integer i se descomprimirá automáticamente como i.intValue (), y comparará los dos valores Talla.

La primera es verdadera, "==" compara direcciones, porque cuando i> = -128 e i <= 127, la primera declaración pondrá el valor de i en la caché, y la segunda vez se tomará directamente del caché Los datos dentro en lugar de recrear un objeto Ingeter. Entonces, el primer resultado de impresión es verdadero porque i = 10 está dentro del rango de la caché.

El segundo es falso, 128 no está entre -128 y 127, por lo que no hay caché cuando se crea el objeto por primera vez y se crea un nuevo objeto Integer por segunda vez. Entonces el resultado de la impresión es falso

El tercero y el cuarto son todos verdaderos, Integer desempaqueta y compara automáticamente los dos tipos de datos básicos.

El quinto es falso, que son dos objetos que salen de nuevo. No existe el concepto de almacenamiento en caché. Por supuesto que es incorrecto comparar con ==

Supongo que te gusta

Origin blog.csdn.net/weixin_46064382/article/details/106886795
Recomendado
Clasificación