java整型(byte/short/int/long)均以有符号二进制补码形式存储,固定字节长度,最高位为符号位;byte占1字节(−128~127),int占4字节(−2³¹~2³¹−1),long占8字节(−2⁶³~2⁶³−1),溢出回绕,运算时byte/short自动提升为int。

Java 中整型数据(byte、short、int、long)采用有符号二进制补码形式直接存储在栈内存中,不涉及对象封装,也不依赖堆。
整型在内存中怎么存?
每个整型类型固定占用特定字节数,所有位都参与数值表达:最高位是符号位(0为正,1为负),其余位表示数值大小。例如:
-
byte占 1 字节(8 位),范围 −128 ~ 127 -
int占 4 字节(32 位),范围 −2,147,483,648 ~ 2,147,483,647 -
long占 8 字节(64 位),范围 −9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
数值超出范围时不会报错,而是发生溢出回绕。比如:
byte a = 127; byte b = (byte)(a + 1); // 结果是 -128,不是 128(越界后从最小值开始)
为什么推荐用 int 而不是 byte 或 short?
- JVM 实际运算中,
byte和short在参与算术运算时会自动提升为int; - CPU 对 32 位整数的处理效率更高,使用
byte/short并不节省运行时性能; - 仅在大规模数组(如百万级像素数据、网络缓冲区)中,用
byte[]才真正节省堆内存。
long 类型要注意什么?
- 字面量必须加后缀
L或l(推荐大写L,避免和数字1混淆),否则编译器按int处理:long x = 10000000000; // 编译错误:超出 int 范围 long y = 10000000000L; // 正确
整型变量默认值和存储位置
- 局部变量无默认值,必须显式初始化;
- 类成员变量(字段)有默认值:
0(byte/short/int/long都是0或0L); - 所有基本类型变量(包括整型)的值本身都存在栈中(局部变量)或堆中对象实例区域(作为对象字段时);不经过引用,不产生额外对象开销。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











