基本类型与引用类型
这是一个基础但非常关键的问题,而且你已经在往“Java 的类型体系”这个正确方向深挖了 👍
我会用 先给结论 → 再拆概念 → 最后对照总结 的方式,讲得清晰、好记、不绕。
一、先给一句最重要的结论
Java 中只有两大类类型:
① 基本类型(primitive type)
② 引用类型(reference type)
没有第三类。
二、什么是「引用类型」?
1️⃣ 一句话定义
引用类型的变量里,存的不是“数据本身”,
而是“指向某个对象的引用(地址的抽象)”。
2️⃣ 用最直观的例子
Object o = new Object();
o是 引用类型变量o里存的是:
👉 “指向堆中 Object 实例的引用”- 真正的数据在 堆里
栈 堆
o ─────────▶ Object实例
3️⃣ 引用类型的核心特征
| 特征 | 说明 |
|---|---|
| 存的是 | 引用(不是对象) |
| 默认值 | null |
| 是否可为 null | ✅ |
| 是否在堆中 | ❌(对象在堆) |
| 是否参与多态 | ✅ |
三、Java 中有哪些「引用类型」?
📌 记住一句话
“凡是用
new出来的,都是引用类型”
1️⃣ 类(class)
Object
String
Integer
User
User u = new User();
2️⃣ 接口(interface)
List list = new ArrayList();
Runnable r = new Thread();
3️⃣ 数组(array)⚠️ 很多人会忽略
int[] a = new int[10];
String[] b = new String[5];
✔ 数组本身是对象
✔ 所以是引用类型
4️⃣ 枚举(enum)
enum Color { RED, GREEN }
Color c = Color.RED;
✔ 枚举本质是类
5️⃣ 注解(annotation)
@Override
✔ 本质是接口 + JVM 特殊处理
四、那“不是引用类型”的是什么?
👉 基本类型(primitive type)
Java 中一共 8 种
| 类型 | 大小 | 示例 |
|---|---|---|
| byte | 1B | byte b = 1; |
| short | 2B | short s = 2; |
| int | 4B | int i = 3; |
| long | 8B | long l = 4L; |
| float | 4B | float f = 1.0f; |
| double | 8B | double d = 2.0; |
| char | 2B | char c = 'a'; |
| boolean | 不固定 | boolean ok = true; |
1️⃣ 基本类型的特征
| 特征 | 基本类型 |
|---|---|
| 存的是 | 值本身 |
| 默认值 | 有 |
| 是否可为 null | ❌ |
| 是否是对象 | ❌ |
| 是否可调用方法 | ❌ |
| 是否参与多态 | ❌ |
2️⃣ 和引用类型最根本的区别(本质)
int a = 10;
int b = a;
👉 值拷贝
User u1 = new User();
User u2 = u1;
👉 引用拷贝(指向同一对象)
五、包装类型算哪一类?(必考)
Integer x = 10;
❗ Integer 不是基本类型
包装类型是:
| 基本类型 | 包装类型 |
|---|---|
| int | Integer |
| long | Long |
| double | Double |
| char | Character |
| boolean | Boolean |
✔ 包装类型是 类
✔ 所以是 引用类型
六、一个非常容易混淆的误区
❌ 错误理解
Java 有“值类型”和“引用类型”两种传递方式
✅ 正确理解
Java 只有值传递
- 基本类型:传的是“值”
- 引用类型:传的是“引用的值”
七、用一句“终极记忆口诀”收尾
Java 类型只有两种:
基本类型存值,引用类型存引用;
对象在堆,引用随变量走。

浙公网安备 33010602011771号