Java中引用类型与基本类型核心区别在于内存位置、赋值行为、比较方式及是否可为null:基本类型存栈、值拷贝、==比数值、不可为null;引用类型存堆地址、地址拷贝、==比地址、可为null。

Java 中引用数据类型和基本数据类型最核心的区别在于:**内存存储位置不同、赋值行为不同、比较方式不同,以及是否可为 null**。
内存分配位置不同
基本数据类型(如 int、char、boolean 等)的值直接存储在栈(stack)中;而引用数据类型(如 String、ArrayList、自定义类对象等)的变量本身存的是一个“地址”,这个地址指向堆(heap)中真正存放对象数据的位置。
例如:
- int a = 10; → 数字 10 就放在栈里
- String s = "hello"; → 变量 s 在栈中存的是某个地址,真正的字符串对象 "hello" 存在堆里
赋值时的行为不同
基本类型赋值是“值拷贝”,两个变量互不影响;引用类型赋值是“地址拷贝”,多个变量可能指向同一个对象。
立即学习“Java免费学习笔记(深入)”;
例如:
- int x = 5; int y = x; → 修改 y 不影响 x
- StringBuilder sb1 = new StringBuilder("a"); StringBuilder sb2 = sb1; → sb2.append("b") 后,sb1.toString() 也会变成 "ab"
比较操作的含义不同
用 == 比较时:
- 对基本类型:比较的是数值是否相等
- 对引用类型:比较的是两个变量是否指向堆中的同一块内存(即地址是否相同)
所以判断字符串内容是否相等要用 .equals(),而不是 ==。
null 的支持性不同
基本类型不能为 null,它们都有默认值(如 int 默认是 0,boolean 是 false);而所有引用类型变量都可以赋值为 null,表示当前不指向任何对象。
例如:
- Integer i = null; ✅ 合法(包装类是引用类型)
- int j = null; ❌ 编译错误










