int是Java中32位有符号整数,默认占4字节,取值范围-2147483648至2147483647,跨平台一致;支持十进制、八进制(0开头)、十六进制(0x开头)字面量;可隐式转long或小范围字面量转byte/short,但变量赋值需强制转换;超范围或高精度场景应改用long。

int 是 Java 中最常用、最基础的整数类型,它不是“随便选的”,而是设计权衡后的默认选择:兼顾性能、范围与兼容性。它的行为看似简单,但细节决定是否写出健壮、可移植的代码。
int 的本质规格
int 是 32 位有符号整数,固定占用 4 个字节内存,取值范围严格限定在 -2147483648 到 2147483647(即 -2³¹ 到 2³¹−1)。这个范围与具体操作系统或硬件无关,是 Java 虚拟机规范强制保证的,确保跨平台一致性。
- 最高位为符号位:0 表示正数,1 表示负数,其余 31 位表示数值大小
- 整数字面量(如
123、-5000)默认就是 int 类型,无需额外声明 - 超出范围的字面量(如
3000000000)编译直接报错,不会自动升级为 long
int 的赋值与隐式转换规则
Java 允许安全的“小转大”自动转换,但对“大转小”保持警惕——int 正处于这个转换链条的中心位置。
- 可以无条件赋值给
long变量(自动补高位符号位或 0) - 可以赋值给
short或byte变量,但仅当字面量值在目标类型范围内(如byte b = 100;合法,byte b = 200;编译失败) - 不能直接用 int 变量赋值给 byte/short(如
int x = 100; byte b = x;会报错),必须显式强制转换:byte b = (byte) x; - 从 byte/short 赋值给 int 始终安全,自动提升,不丢失信息
进制表示与常见误用
int 字面量支持十进制、八进制(以 0 开头)、十六进制(以 0x 或 0X 开头),但写法稍有不慎就容易出错。
立即学习“Java免费学习笔记(深入)”;
-
0144是八进制,等于十进制 100;0x64是十六进制,也等于 100 - 前缀
0很容易被误认为“只是格式化”,实际会触发八进制解析(08、09是非法八进制,编译报错) - 不要混淆
int和Integer:前者是基本类型,后者是对象包装类,涉及自动装箱/拆箱时可能引发空指针或性能开销
何时该放弃 int?
int 不是万能的。当业务场景突破其数值边界或语义约束时,必须主动切换。
- 时间戳(毫秒级):当前时间
System.currentTimeMillis()已超 17 亿,接近 int 上限,务必用long - 文件大小、数据库主键 ID、人口统计量等可能达数十亿甚至万亿级数据,int 易溢出
- 涉及累计运算(如计费、积分累加)且生命周期长的变量,建议提前评估增长趋势
- 与外部系统(如 JSON API、数据库字段)交互时,若对方定义为 64 位整数,Java 端应统一使用 long,避免截断


















