# Java 自动装箱和拆箱

> 原文： [https://www.programiz.com/java-programming/autoboxing-unboxing](https://www.programiz.com/java-programming/autoboxing-unboxing)

#### 在本教程中，我们将借助示例学习 Java 自动装箱和拆箱。

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

在**自动装箱**中，Java 编译器自动将原始类型转换为它们对应的包装器类对象。 例如，

```java
int a = 56;

// autoboxing
Integer aObj = a; 
```

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

* * *

### 示例 1：Java 自动装箱

```java
import java.util.ArrayList;

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

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

      //autoboxing
      list.add(5);
      list.add(6);

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

**输出**

```java
ArrayList: [5, 6] 
```

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

注意这一行，

```java
list.add(5); 
```

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

* * *

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

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

```java
// autoboxing
Integer aObj = 56;

// unboxing
int a = aObj; 
```

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

* * *

### 示例 2：Java 拆箱

```java
import java.util.ArrayList;

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

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

      //autoboxing
      list.add(5);
      list.add(6);

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

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

**输出**：

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

在上面的示例中，请注意以下行：

```java
int a = list.get(0); 
```

此处，`get()`方法返回索引为`0`的对象。 但是，由于**取消装箱**，该对象会自动转换为原始类型`int`并分配给变量`a`。