选对整型需兼顾数据范围、内存效率与语义表达:byte(-128~127)、short(-32768~32767)、int(常规场景)、long(时间戳等大数);批量存储时小类型显著省内存;注意运算自动提升和溢出风险;类型选择应匹配业务语义与数据库字段。

选对整型,关键看数据范围和内存压力。别默认全用 int,该省的地方省得明显。
看数值范围,不超就往下压
先确认你要存的数最大多大、最小多小,再对照类型上限:
- byte:-128 到 127 → 适合温度(-50℃~100℃)、状态码、RGB 单通道值(0~255)
- short:-32768 到 32767 → 适合音频采样值、小规模计数器、协议字段(如 HTTP 状态码 100~599)
- int:-2147483648 到 2147483647 → 够用大多数场景:数组索引、循环变量、用户 ID(中小系统)、商品库存
- long:-9223372036854775808 到 9223372036854775807 → 必须用在时间戳(毫秒/纳秒)、高并发订单号、银行流水号、大型系统用户 ID
批量存储时,内存差异会放大
单个变量差几字节不明显,但上百万个元素的数组或对象字段,差别就出来了:
- 100 万个
int数组:占约 4MB(4 字节 × 10⁶) - 换成
byte数组(如果值都在 -128~127):只占约 1MB - 图像处理中每个像素存 R/G/B/A 四个分量 → 用
byte比int节省 75% 内存
注意隐式转换和运算陷阱
类型小不代表能随便混用,Java 有自动提升规则:
立即学习“Java免费学习笔记(深入)”;
- 所有
byte、short、char运算前自动转成int,所以byte a = 10; byte b = 20; byte c = a + b;会编译失败(需显式强转) - 赋值时必须保证不溢出,比如
byte b = 128;编译报错(超了 127) - 时间戳必须用
long,写成int timestamp = System.currentTimeMillis();会截断出错
结合业务语义做选择
类型不仅是技术约束,也是代码可读性和安全性的体现:
- 表示“开关状态”(0/1)或“协议版本号(v1/v2)”,用
byte更贴切,比int更清晰表达“就这几个值” - 数据库映射字段是
TINYINT或SMALLINT,Java 实体类对应用byte或short,保持语义一致 - 避免为“以后可能变大”而提前用
long,除非已有明确需求;过度预留反而增加 GC 压力和缓存行浪费


















