java整数类型应按需选用:byte(1字节,-128~127)适用于协议字段、像素值等小范围场景;short(2字节,-32768~32767)用于密集数组节省内存;int(4字节,±21亿)是默认主力,覆盖多数业务;long(8字节,±9.2×10¹⁸)专用于时间戳、分布式id等大数需求,赋值需加l后缀。

Java 的整数类型不是“越大越好”,选对类型才能兼顾内存效率、运算安全和语义清晰。byte、short、int、long 四者本质是同一逻辑(有符号补码),但位宽不同,直接决定范围、内存占用和隐式行为。
字节与范围:一眼看清关键差异
记住这组对应关系,比死记硬背更可靠:
- byte:1 字节,-128 ~ 127(Byte.MIN_VALUE ~ Byte.MAX_VALUE)
- short:2 字节,-32768 ~ 32767(Short.MIN_VALUE ~ Short.MAX_VALUE)
- int:4 字节,-2147483648 ~ 2147483647(Integer.MIN_VALUE ~ Integer.MAX_VALUE)
- long:8 字节,-9223372036854775808 ~ 9223372036854775807(Long.MIN_VALUE ~ Long.MAX_VALUE)
所有极值都封装在对应包装类的静态常量中,代码里直接用它们,不靠心算也不查表。
什么时候该用 byte 或 short?
它们不是“int 的缩水版”,而是为特定场景设计的:
- byte 适合协议字段、文件流单字节读写、像素灰度值(0–255)、状态标志位;超出 -128~127 赋值会编译失败,强制校验边界
- short 在密集数组中存小整数(如传感器千点采样索引)可省一半内存,但日常业务极少需要——别为了“看起来省”而牺牲可读性
- 注意:byte 和 short 在参与算术运算时会自动提升为 int,
byte a = 1, b = 2; byte c = a + b;编译报错,必须显式强转:byte c = (byte)(a + b);
int 是默认选择,long 有明确使用信号
绝大多数场景直接用 int 就对了:
- 循环变量、数组长度、集合 size()、普通 ID、计数器、HTTP 状态码等,int 范围足够且 JVM 优化最成熟
- long 明确用于时间戳(
System.currentTimeMillis())、大文件字节数、分布式唯一 ID(如 Snowflake)、超过 21 亿的累计值 - 声明 long 常量必须加
L后缀,比如long id = 1234567890123456789L;,否则可能被当作 int 导致溢出
避免常见陷阱
取值范围只是起点,实际编码中几个细节容易踩坑:
- 不要用 int 存毫秒级时间戳——2038 年问题真实存在;长期运行系统一律用 long
- 数据库主键如果是 bigint,Java 端必须用 long 接收,用 int 可能截断或抛异常
- 比较两个数值前确认类型一致,
int i = 100; long l = 100L; System.out.println(i == l);结果是 true,但涉及包装类时(IntegervsLong)会因自动拆箱规则引发空指针或误判 - 做累加或乘法时留意溢出风险,必要时用
Math.addExact()或Math.multiplyExact()主动捕获异常
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











