装箱和拆箱

[TOC]

装箱和拆箱

包装类

将基本类型包装起来,使基本类型拥有对象的性质。

基本类型 包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

自动拆箱与自动装箱

Integer integer = 10; //自动装箱
// Integer integer = new Integer(10); jdk1.5之前写法
int in = integer; //自动拆箱
System.out.println(integer);
System.out.println(in)
//反编译后代码
Integer integer=Integer.valueOf(10);
int i=integer.intValue();

自动装箱是通过valueOf()方法实现,自动拆箱则是通过intValue()实现。
同理可查看其他几种基本类型。

使用场景

  • 将基本类型放入集合类

    List integerList = new ArrayList<>();
    for (int j = 0; j < 10; j++) {
        integerList.add(j);
    }
    //反编译后代码
    ArrayList localArrayList = new ArrayList();
    for (int i13 = 0; i13 < 10; i13++) {
        localArrayList.add(Integer.valueOf(i13)); //装箱
    }
    
  • 包装类与基本类型比较

    Integer a=1;
    System.out.println(a==1);
    //反编译后代码
    Integer localInteger2 = Integer.valueOf(1); //装箱
    System.out.println(localInteger2.intValue() == 1);//拆箱
    
  • 包装类型运算

    Integer aa = 1;
    Integer bb = 1;
    System.out.println(aa+bb);
    //反编译后代码
    Integer localInteger3 = Integer.valueOf(1);//装箱
    Integer localInteger4 = Integer.valueOf(1);
    System.out.println(localInteger3.intValue() + localInteger4.intValue());//拆箱
    
  • 三目运算符

    boolean flag = true;
    Integer ii = null;
    int jj = 1;
    Integer k = flag ? ii : jj;
    //反编译后代码 
    int i14 = 1;
    Object localObject = null;// null拆箱,空指针
    int i15 = 1;
    Integer localInteger5 = Integer.valueOf(i14 != 0 ? ((Integer)localObject).intValue() : i15);//拆箱
    //抛出空指针异常
    
  • 函数参数与返回值

    //自动拆箱
    public int getNum1(Integer num) {
        return num;
    }
    //自动装箱
    public Integer getNum2(int num) {
        return num;
    }
    

你可能感兴趣的:(装箱和拆箱)