java八大基本数据类型严格分为整数型(byte/short/int/long)、浮点型(float/double)、字符型(char)、布尔型(boolean)四类,内存占用固定(boolean除外),取值范围由补码或ieee 754决定,默认值仅对成员变量生效,存储位置取决于作用域(局部变量在栈,成员变量随对象在堆)。

Java 八大基本数据类型不是随意划分的,而是按语义功能和底层存储特性严格归为四类,每类对应明确的内存占用、取值逻辑与使用边界。掌握它们的关键,是把“类型名—字节数—范围—默认值—存储位置”连成一条线,而不是孤立记忆。
整数类型:4种,统一有符号补码,但适用场景差异极大
byte、short、int、long 都用于整数,但设计目标完全不同:
-
byte(1 字节):取值 -128 ~ 127,唯一适合网络/IO 字节流处理的类型;声明
byte b = 100;合法,但b = b + 1编译失败——因运算自动提升为 int,需强制转回:b = (byte)(b + 1) - short(2 字节):-32768 ~ 32767,实际开发中极少单独使用;常出现在遗留协议或嵌入式通信字段中
-
int(4 字节):-2147483648 ~ 2147483647,整数运算默认类型;
15 + 20结果就是 int,无需声明 -
long(8 字节):必须用
L或l后缀(推荐大写 L 避免与数字 1 混淆),如1234567890123456789L;时间戳、分布式 ID、大文件长度必用
浮点类型:2种,精度与用途不可互换
float 和 double 都遵循 IEEE 754 标准,但精度和默认行为差异显著:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
float(4 字节):单精度,约 6~7 位有效数字;默认值写法必须带
f或F,如3.14f;适合图形渲染、实时模拟等对速度敏感、精度容忍度高的场景 -
double(8 字节):双精度,约 15~16 位有效数字;日常数值计算默认类型;
0.1 + 0.2 != 0.3是浮点误差典型表现,金融计算必须用BigDecimal,而非靠 float/double 强行取舍
字符与布尔类型:1+1,语义纯粹但易被误解
char 和 boolean 看似简单,却藏着关键细节:
-
char(2 字节):无符号 Unicode 字符,范围
'\u0000'(0)到'\uffff'(65535),可完整表示常用汉字(如'中')、emoji 基础符号;不是“只能存英文字母”,也不是“等价于 short” - boolean(无固定字节定义):JVM 规范未规定其物理大小;HotSpot 中字段通常对齐为 1 字节,数组中每个元素也占 1 字节;不能参与算术运算,不能转为 int,也不能用 byte 替代来“省空间”——这种替换破坏语义,且 JVM 已做优化,手动替代反而降低可读性与性能
内存分配真相:栈 ≠ 总在栈上,关键看变量作用域
常说“基本类型在栈”,但必须加前提:
-
局部变量(方法内声明):确实在当前线程栈帧中分配,生命周期与方法调用一致;
int x = 5;的 4 字节直接压入栈 -
成员变量(类中字段):随所在对象一起分配在堆中;
class User { int age; }的age是对象内存布局的一部分,不在栈 -
数组元素:
int[] arr = new int[100];数组对象在堆,100 个 int 值连续紧凑存储在堆内存块中;而 100 个独立int a1, a2, ..., a100;在栈中可能因对齐填充占用更多空间 -
默认值只对成员变量生效:局部变量不赋值就使用,编译直接报错;成员变量即使不写初始化,
int自动得 0,boolean得false
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










