Entiendo algo de boxeo y unboxing automáticos, y espero que sea útil para todos.
El método de boxeo automático y unboxing automático:
Método de boxeo automático: el código fuente de Java es el siguiente:
private static class IntegerCache{
static final Integer cache[];
static{
对-128到127对象的创建
}
}
public static Integer valueOf(int i){
if(i <= IntegerCache.high && i >= IntegerCache.low)
return IntegerCache.chache[i - IntegerCache.low];
return new Integer(i);
}
clase Entero tiene una clases internas estáticas IntegerCache la (clase de nivel clases internas), lo que para algunos números int comúnmente utilizados, para ser exactos es un número entre -128 y 127 creado objeto Integer y se colocan en un
estático
array tampón Medio (caché entero []).
Entero i = 100; El código real para completar es: Entero i = Integer.valueOf (100); Dado que 100 está en el rango de valores en caché (-128-127), no se crea un nuevo objeto Integer, sino una referencia Los objetos en la matriz Integer cache [] dentro de IntegerCache (datos estáticos, compartidos por objetos de este tipo).
Integer j = 200; El código real para completar es: Integer i = Integer.valueOf (100); pero llama al nuevo Integer (200); el constructor crea el objeto.
Ejemplos:
public static void main(String[] args) {
Integer a=100;
Integer b=100;
Integer c=200;
Integer d=200;
System.out.println(a==b); //1
System.out.println(a==100); //2
System.out.println(c==d); //3
System.out.println(c==200); //4
}
El resultado es verdadero verdadero falso verdadero
Unboxing llama al
código fuente de Java de la siguiente manera:
private final int value;
public Integer(int value){
this.value = value;
}
public int intValue(){
return value;
}