java中基本数据类型仅有byte、short、int、long、float、double、char、boolean共8种,其余均为引用类型;基本类型变量在栈中直接存储值,引用类型变量在栈中存地址、真实对象在堆中;基本类型赋值复制值,引用类型赋值复制地址。

Java 中区分基本数据类型和引用数据类型,关键看三点:声明方式、内存存放位置、赋值时的行为。不是靠名字或写法猜测,而是由语言规范严格定义的。
看是否属于这 8 种固定类型
基本数据类型只有且仅有以下 8 个,全部是 Java 关键字,不能被继承或修改:
- 整数型:byte、short、int、long
- 浮点型:float、double
- 字符型:char
- 布尔型:boolean
只要不是这 8 个之一,就一定是引用数据类型。比如 String、ArrayList、int[]、Scanner、List
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
看变量在内存中存的是什么
基本类型变量在栈中直接存数值本身;引用类型变量在栈中只存一个地址,真实数据在堆里。
- int a = 100 → 栈里那块空间就放着数字 100
- String s = "hi" → 栈里放的是类似 0x7f8a12 这样的地址,真正的 "hi" 存在堆中
- Integer i = 100 → 虽然包装了 int,但 Integer 是类,所以 i 是引用类型,栈中存地址
看赋值后修改是否互相影响
这是最实用的判断方法——动手试一试:
- 基本类型赋值是“复制一份值”:
int x = 5; int y = x; y = 8; → x 还是 5 - 引用类型赋值是“复制一份地址”:
StringBuilder a = new StringBuilder("A"); StringBuilder b = a; b.append("B"); → a.toString() 结果也是 "AB"
注意:String 是引用类型,但因为不可变(immutable),s2 = s1 + "x" 实际创建了新对象,所以不会影响 s1 —— 这是特例,不改变它属于引用类型的本质。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










