应优先选用最小够用的基本整型:byte(1字节,-128~127)、short(2字节,-32768~32767)、int(4字节,-2147483648~2147483647)、long(8字节,-9223372036854775808~9223372036854775807),避免不必要的包装类和内存浪费。

核心就一条:用最小够用的类型,且全程坚持用基本类型,别让它变成对象。
按数值范围选整数类型
别一上来就用 int。byte 占 1 字节,short 占 2 字节,int 是 4 字节,long 是 8 字节——差得不是一点半点。
- HTTP 状态码(0–99)、用户性别、开关标志、RGB 像素值 → 用 byte
- 数据库 SMALLINT 字段、传感器温度(-50~100)、小尺寸 ID → 用 short
- 循环变量、数组索引、通用计数器 → 还是用 int,JVM 对它做了深度优化,降级反而可能触发隐式提升,没收益
- 毫秒时间戳、分布式 ID(超 21 亿)→ 才上 long;别为“以后可能变大”提前升级
浮点数看业务容忍度选 float 或 double
float 固定 4 字节,double 是 8 字节。精度差距真实存在,但很多场景根本用不到 double 的 15 位有效数字。
- 图形坐标、推荐得分(保留 1 位小数即可)、环境传感器读数 → float 完全胜任,内存直接减半
- 金融计算、经纬度高精度定位、科学仿真 → 必须用 double,或更稳妥地用 BigDecimal
- 写 float 字面量记得加 f 后缀:3.14f;否则编译器按 double 处理,再转 float 有额外开销
死守基本类型,绕开包装类
Integer 不是 “高级 int”,它是 24 字节的对象(64 位 JVM + 指针压缩)。一个 int[] 存 10 万个数约 400KB;同样数量的 Integer[],轻松突破 2.4MB。
立即学习“Java免费学习笔记(深入)”;
- 局部变量、方法参数、返回值,只要不需要 null 语义,一律用 int/long/boolean,别用 Integer/Long/Boolean
- 集合存大量数字?换 int[]、IntArrayList(FastUtil)、或 IntStream;List
是内存黑洞 - 循环里别写
list.add(i)(i 是 int),这会自动装箱;要批量加,先建好数组再转,或用流收集
声明和布局也影响实际占用
类型选对只是开始,怎么写决定最终效果。
- 变量在首次使用处声明:
for (int i = 0; i 比先声明再赋值更优,JVM 能更好复用栈空间 - 字段顺序影响对象内存对齐:JVM 会把 long/double 放前面,然后 int/float,最后 byte/boolean;合理排布可减少填充字节
- boolean[] 是特例——JVM 通常按位存储(1 bit/元素),比一堆独立 boolean 字段省得多;大量开关状态优先用 boolean[] 或 BitSet


















