Java 自动装箱和拆箱(包装类)

基本介绍

包装类的作用: Java 语言中,一切都是对象,但是有例外: 8 个基本数据类型不是对象,因此在很多时候非常不方便。 为此, Java提供为 8 个基本类型提供了对应的包装类:

byte ------- Byte

short ------ Short

int ---------- Integer

long -------- Long

char -------- Character

float -------- Float

double ----- Double

boolean----- Boolean

包装类如何使用? JDK1.5 , 新增了 2 个功能:自动装箱、自动拆箱。

  • 自动装箱: 当我们把一个基本类型的值( 20),赋值给引用变量时候,系统可以 自动将它“包装”为相应的包装类的实例程序需要对象时, 如果给的只是一个基本类型的值, 系统会将它自动装箱为包装类的实例达到的效果: 有了自动装箱之后, 基本类型的值可以当成对象用—— 其实是【假相】 。

  • 自动拆箱: 当我们需要一个基本类型的值时, 但实际上传入的包装类的对象。 系 统会自动把对象“剥”开,得到它的值。 达到的效果: 有了自动拆箱之后, 包装类的对象可当成基本类型的值 用——其实是【假相】 。

自动装箱 ----- 基本类型的值 → 包装类的实例

自动拆箱 ----- 基本类型的值 ← 包装类的实例

事实上,包装类比基本类型更好用——基本类型能做的事情,包装类也能做。 但包装类能做的,基本类型不一定能做,比 如要赋一个 null 值。

Java自动装箱-包装器对象的原始类型

自动装箱中,Java编译器会自动将原始类型转换为其相应的包装器类对象。例如,

int a = 56;
// 自动装箱
Integer aObj = a;

使用Java集合时,自动装箱具有很大的优势。

示例:Java自动装箱

import java.util.ArrayList;

class Main {
   public static void main(String[] args) {

      ArrayList<Integer> list = new ArrayList<>();

      //自动装箱
      list.add(5);
      list.add(6);

      System.out.println("ArrayList: " + list);
   }
}

输出结果

ArrayList: [5, 6]

在上面的示例中,我们创建了一个Integer类型的数组列表。因此,数组列表只能包含Integer类型的对象。

注意这一行,

list.add(5);

在这里,我们传递原始类型值。但是,由于自动装箱,原始值会自动转换为Integer对象并存储在数组列表中。

Java拆箱-包装器对象为原始类型

拆箱中,Java编译器会自动将包装器类对象转换为其相应的原始类型。例如,

// 自动装箱
Integer aObj = 56;

// 拆箱
int a = aObj;

自动装箱一样,拆箱也可以与Java集合一起使用。

示例2:Java拆箱

import java.util.ArrayList;

class Main {
   public static void main(String[] args) {

      ArrayList<Integer> list = new ArrayList<>();

      //自动装箱
      list.add(5);
      list.add(6);

      System.out.println("ArrayList: " + list);

      // 拆箱
      int a = list.get(0);
      System.out.println("Value at index 0: " + a);
   }
}

输出结果

ArrayList: [5, 6]
Value at index 0: 5

在上面的示例中,请注意以下行:

int a = list.get(0);

这里,get()方法返回索引0处的对象。但是,由于拆箱,对象被自动转换为原始类型int并分配给变量a。

编程笔记 » Java 自动装箱和拆箱(包装类)