java八大基本数据类型与对应包装类一一对应,用于弥补基本类型在集合、泛型、判null和调方法等面向对象场景的不足;自动装箱/拆箱是jdk5引入的语法糖,底层调用valueof()和xxxvalue()方法,integer等存在缓存机制(如-128~127),比较值应使用equals()而非==。

八大基本类型与包装类一一对应
每种基本类型都有唯一、固定、大小写敏感的包装类,全部在 java.lang 包下,无需 import:
- byte → Byte
- short → Short
- int → Integer(注意不是 Int)
- long → Long
- float → Float
- double → Double
- char → Character(注意不是 Char)
- boolean → Boolean
记忆技巧:除 int 和 char 外,其余都是首字母大写;所有包装类都不可变(immutable),天然线程安全。
为什么必须用包装类?四个实际需求
基本类型功能有限,包装类解决的是真实开发中无法回避的问题:
- 集合框架(如
ArrayList<integer></integer>)只接受对象,不能写ArrayList<int></int> - 泛型参数必须是引用类型,
List<t></t>中的T不能是int - 基本类型默认值固定(如
int i默认为 0),无法区分“未初始化”和“值为 0”;包装类初始为null,语义更清晰 - 提供大量静态工具方法,例如:
Integer.parseInt("123")、Double.parseDouble("3.14")、Character.isLetter('a')
自动装箱与拆箱:编译器写的“隐形代码”
从 JDK 5 开始支持,本质是语法糖,运行时仍调用包装类的方法:
-
自动装箱:基本类型 → 包装类,等价于调用
valueOf()
例如Integer i = 100;编译后实际是Integer i = Integer.valueOf(100); -
自动拆箱:包装类 → 基本类型,等价于调用
xxxValue()
例如int x = i;实际是int x = i.intValue();
⚠️ 风险点:对 null 的包装类变量执行拆箱会直接抛 NullPointerException。
Integer 缓存机制:-128 到 127 是“共享区”
Integer.valueOf(int) 并非每次都新建对象。JVM 默认缓存了 -128 到 127(含)之间的整数对象:
-
Integer a = 100; Integer b = 100;→a == b为 true(指向同一缓存对象) -
Integer c = 200; Integer d = 200;→c == d为 false(各自新建对象)
这个范围可通过 JVM 参数 -Djava.lang.Integer.IntegerCache.high=xxx 扩展(仅 high 可调,low 固定为 -128)。其他包装类(Byte、Short、Long、Character)也有类似缓存,但只有 Integer 的范围可配置;Boolean 缓存 true/false 两个常量。
比较包装类值时,应始终使用 equals(),而非 == —— 后者比较的是引用,不是数值。











