日期:2026-07-29
项目:c260729
作者:WanJL
Java 中分为基本数据类型和引用数据类型。Java 的核心思想是「万事万物皆为对象」,对象就一定有属性和方法。但 Java 中的 8 种基本数据类型(byte、short、int、long、float、double、char、boolean)是从 C/C++ 延续过来的,并不符合 Java 的面向对象特性——它们没有属性、也没有方法。
为了解决这个问题,Java 为每个基本数据类型都设置了对应的引用数据类型,即包装器类(Wrapper Classes)。
📄 来源:
packaging/Demo01.java
| 基本数据类型 | 包装器类(引用数据类型) |
|---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
包装器类具有属性和方法,属于引用数据类型。
📄 来源:
packaging/Demo01.java
装箱(Boxing):从基本数据类型 → 引用数据类型(包装类)
拆箱(Unboxing):从引用数据类型(包装类) → 基本数据类型
// 手动装箱(JDK9 前的方式,之后已标记为过时)
Integer integer = new Integer(a); // 装箱
// 自动装箱(JDK5+,推荐方式)
Integer i = a; // int → Integer,自动装箱
Integer i1 = 15; // 直接赋值,自动装箱
// 手动拆箱
int a1 = integer.intValue(); // 调用 intValue() 方法拆箱
// 自动拆箱(JDK5+,推荐方式)
int a2 = i; // Integer → int,自动拆箱
📄 来源:
packaging/Demo01.java
Integer.valueOf(int) 方法Integer.intValue() 方法ArrayList<Integer>)必须使用包装类,不能使用基本类型null 值:包装类属于引用类型,可以为 null,这在数据库映射等场景中很有用Integer.parseInt()、Integer.valueOf() 等)在实际开发中,Bean 类(如 Person)的属性通常会使用包装类而非基本类型,原因包括:
null(数据库字段可为空)统一使用引用数据类型,符合 OOP 风格
public class Person {
private String name;
private Integer age; // 使用 Integer 而非 int,允许 age 为 null
// getter / setter 方法
}
📄 来源:
packaging/Person.java
以 Integer 为例,包装类提供了一些非常实用的静态方法:
| 方法 | 说明 |
|---|---|
Integer.parseInt(String s) |
将字符串解析为 int |
Integer.valueOf(int i) |
将 int 转换为 Integer(自动装箱底层调用) |
Integer.valueOf(String s) |
将字符串转换为 Integer |
int Integer.intValue() |
将 Integer 转换为 int(自动拆箱底层调用) |
Integer.MAX_VALUE |
int 的最大值(常量: 2147483647) |
Integer.MIN_VALUE |
int 的最小值(常量: -2147483648) |
其他包装类(Double、Boolean、Character 等)也有类似的方法。
部分包装类(Integer、Byte、Short、Long、Character)在自动装箱时存在缓存机制:
-128 ~ 127 范围的整数== 比较为 true)超出此范围,每次自动装箱都会新建对象
Integer a = 100; // 从缓存池获取
Integer b = 100; // 从缓存池获取
System.out.println(a == b); // true
Integer c = 200; // 超出缓存范围,新建对象
Integer d = 200; // 超出缓存范围,新建对象
System.out.println(c == d); // false
// 推荐使用 equals() 比较包装类对象的值
System.out.println(c.equals(d)); // true
注意:包装类对象的值比较应始终使用
equals()方法,不要使用==。
集合(Collection) 是用来存储 Java 变量、对象的容器,也称为集合容器。
与数组一样,集合也是容器,可以存储多个数据。但二者有显著区别:
| 对比维度 | 数组 | 集合 |
|---|---|---|
| 长度 | 一旦创建,长度不可变 | 长度可变,可动态增减 |
| 存储类型 | 可存储基本数据类型和引用数据类型 | 只能存储引用数据类型(若需存基本类型,须用对应的包装类) |
| 元素类型 | 只能存储同一种数据类型(类型固定) | 可存储多种数据类型(但建议存储单一类型,以便泛型约束) |
📄 来源:
collection/Demo01.java
Java 的集合框架分为两大派系:
Collection(单列集合) Map(双列集合)
/ \ / \
List Set HashMap TreeMap
/\ /\ LinkedHashMap
ArrayList HashSet
LinkedList TreeSet
Vector LinkedHashSet
Collection(单列集合):
ArrayList:数组结构实现LinkedList:链表结构实现Vector:早期版本,线程安全HashSet:哈希表实现TreeSet:红黑树实现(可排序)LinkedHashSet:可保持插入顺序Map(双列集合):
📄 来源:
collection/Demo01.java
集合被称为集合框架,因为它把底层数据结构进行了封装。
List 直译为"列表",对应数据结构中的线性表结构。线性表结构大致分为四种:
操作术语:
移除元素 → 出栈 / 弹栈(pop)
入栈顺序: A → B → C
出栈顺序: C → B → A
特点:先进先出(FIFO — First In First Out)
入队顺序: A → B → C
出队顺序: A → B → C
arr[index])对应实现类:ArrayList
索引: [0] [1] [2] [3] [4] [5]
值: 10 20 30 40 50 60
↑ 连续存储空间
对应实现类:LinkedList
头结点 → Node1 → Node2 → Node3 → null
data data data
next→ next→ next→
| 实现类 | 对应数据结构 | 查询特点 | 增删特点 |
|---|---|---|---|
ArrayList |
数组(Array) | 快(索引定位) | 慢(元素移动) |
LinkedList |
链表(Linked List)、队列(Queue)、栈(Stack) | 慢(从头遍历) | 快(改指针) |
📄 来源:
collection/Demo02.java
| 知识点 | 说明 | 对应文件 |
|---|---|---|
| 包装类概念 | 8种基本类型→包装类,装箱/拆箱 | packaging/Demo01.java |
| 包装类在 Bean 中的应用 | Integer 替代 int |
packaging/Person.java |
| 包装类缓存机制 | -128~127 缓存池,== vs equals() |
— |
| 集合框架概述 | 集合 vs 数组对比,体系结构 | collection/Demo01.java |
| 线性表数据结构 | 栈/队列/数组/链表 特点 | collection/Demo02.java |
Integer 替代 int),便于表达 null 语义== 比较包装类时的缓存问题null 包装类拆箱会抛出 NullPointerExceptionArrayList → 数组,LinkedList → 链表/队列/栈