正在加载...

Java 中的包装类型

创建名为 nums 的 ArrayList<Integer>,先调用 nums.add(9); 再调用 nums.add(4);,然后打印 nums.get(0)。编译 Crate.java 并运行 java Crate。屏幕应显示一行:9。尖括号里是 Integer,不是 int。通过包装类型把整数放进列表——让集合能保存对象——就是本页要教的内容。

为什么列表需要 Integer

在 iterating 页,列表保存的是 String 单词。ArrayList 存放对象。原始类型 int 不是对象。包装类型 Integer 是整数的对象形式。在尖括号里写 Integer。当你调用 add(9) 时,本页上 Java 可以把原始值 9 自动装箱成 Integer。这种安静的装箱对本课教学文件已经够用。
打开 Crate.java。保留公共类名 Crate,让它与文件名一致。删掉残留的 for (String t : tags)、oak 与 pine 的 add、Lane 演示,以及任何残留的 HashSet 或 map。也删掉任何 Scanner 或 nextLine。程序不得等待你打字。
靠近顶部、在 public class Crate 上方写:
import java.util.ArrayList;
在 main 里创建列表:
ArrayList<Integer> nums = new ArrayList<Integer>();
不要写 ArrayList<int>——javac 会拒绝那种写法。本页创建行的两侧都保留 Integer。然后不加引号地加入两个整数:
nums.add(9);
nums.add(4);
接着写:
System.out.println(nums.get(0));
零号槽位保存的是 9。编译前先保存。

Crate Integer list get

java
import java.util.ArrayList;

public class Crate {
    public static void main(String[] args) {
        ArrayList<Integer> nums = new ArrayList<Integer>();
        nums.add(9);
        nums.add(4);
        System.out.println(nums.get(0));
    }
}

在存放 Crate.java 的文件夹中运行 javac Crate.java。当圆括号、花括号、尖括号和分号都匹配时,javac 自己不会写出任何一行。然后运行 java Crate——不要 java Crate.java,也不要 java Integer。运行命令里去掉 .java 结尾。
程序应打印一行后停止:9。它不应要求你输入。若终端在等待键盘输入,说明旧练习里的 nextLine 调用还留在某个文件里。删掉那个调用,保留 ArrayList<Integer> 的创建、两行 add,以及 System.out.println(nums.get(0));。
把运行走一遍。Java 从 Crate.main 开始。列表用两个已装箱的整数增长。get(0) 返回第一个 Integer。打印行写出 9。屏幕显示 9。不应再打印别的内容。若看到 oak 或 pine,说明 Lane 的 iterating 演示还在跑——改跑 java Crate。若看到 4,说明你误打了 get(1);教学文件请保留 get(0)。若看到 [9, 4],说明你打印了整个列表对象而不是零号槽位——测验路径请保留 println(nums.get(0))。
若 javac 拒绝 ArrayList<int>,把括号改成 Integer。这个错误正是本课类型规则的重点;改好括号再编译一次。若写成带引号的 nums.add("9");,你加的是 String,对 ArrayList<Integer> 来说 javac 会拒绝。本页保持裸数字。若缺少 import,javac 找不到 ArrayList——把 import java.util.ArrayList; 放在类上方。Integer 的大写 I 很重要;括号里写 integer 对不上 Java 在这里期望的包装类型。

拆箱到普通 int

第二个演示把第一个值读进原始类型变量 int,再打印该变量。本赋值上 Java 会替你把 Integer 拆箱。

Crate unbox to int

java
import java.util.ArrayList;

public class Crate {
    public static void main(String[] args) {
        ArrayList<Integer> nums = new ArrayList<Integer>();
        nums.add(9);
        nums.add(4);
        int n = nums.get(0);
        System.out.println(n);
    }
}

用同样方式编译并运行。屏幕仍显示 9。int n = nums.get(0); 这一行把包装值取出为普通 int。在本初级路径上你不必调用 intValue()。第一份教学文件保持直接的 println(nums.get(0)) 形态。用拆箱文件看出:原始变量可以保存列表以 Integer 存下的内容。变量名 n 保持与所示完全一致,好让打印行短。不要把遍历 String 标签的 for-each 混进这第二份文件——只留数字列表和这一处 int 赋值。

对照表

一张短表把类型规则说清楚。

📊 int vs Integer for lists

Piece On this page
list type ArrayList<Integer>
illegal ArrayList<int> — not allowed
add nums.add(9); — boxes to Integer
read nums.get(0) prints 9; may unbox to int n
表格只是提醒。你要保留的键入片段是 import、ArrayList<Integer>、两次 add,以及 get(0)。

与 String 列表以及单独原始类型对比

在 iterating 页,ArrayList<String> 保存单词。那仍然有效。本页把元素类型改成 Integer,好让整数能放进列表。残留的 Lane for-each 打印 oak 和 pine 是另一课。本页保留 Crate,用 get(0) 打印 9。
单独的 int x = 9; 仍然不需要任何列表就能工作。当集合 API 在尖括号里要求对象类型时,包装类型才重要。其他包装类型以后沿用同一思路——Double 对应 double,Boolean 对应 boolean——但本页只保留 Integer 与 int,让屏幕保持一个清晰数字。今天不必背下每个包装名;用 Integer 对照 int 以及非法的 ArrayList<int> 学一次模式即可。
附近若还有旧的 Lane.java,可先放着,只在它们搞乱你运行哪个类时再删。编译完本课的包装列表后运行 java Crate。Collections 路径在这里以屏幕上清晰的 9 收尾,之后课程转向错误与文件。

留给 exceptions 的部分

本页结束 Collections 模块里“列表需要包装整数”这一需求。下一模块用 exceptions 打开错误处理。本页就停在 ArrayList<Integer> 与 get(0)。不要在本页把 try 或 catch 当成必做要求。

进入 exceptions 之前

你可以导入 java.util.ArrayList,创建 ArrayList<Integer> nums,添加 9 和 4,并打印 nums.get(0) 看到 9。也可以拆箱到 int n。编译 Crate.java 并运行 java Crate。包装类型让列表能保存整数。下一页是 exceptions,程序在那里发出并处理问题信号。
尖括号里保留 Integer。数字 add 不加引号。教学屏幕的 9 继续用 get(0)。这三条习惯是继续前进前的检查点。当 Crate.java 干净编译后屏幕从 Integer 列表显示 9,包装类型就完成了本课的工作,你可以进入下一主题。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部