Java基本数据类型转换遵循容量阶梯逻辑:小范围自动转大范围,大转小需强制且有溢出风险;boolean和String不参与数值转换;运算时按int→long→float→double逐级提升;装箱拆箱自动进行但需防null。

Java基本数据类型转换不是靠死记,而是有清晰的层级逻辑。掌握这张“容量阶梯”和对应规则,比背表格更可靠。
自动转换:小转大,安全无损
只要是从取值范围小的类型转向大的类型,编译器就自动完成,无需括号。关键看内存容量和数值范围:
- 整数方向:byte → short → int → long → float → double
- 字符方向:char → int → long → float → double(注意:char 和 short 都占2字节,但 char 取值范围是 0–65535,short 是 -32768–32767,所以 char 不自动转 short,但可直接转 int)
- 浮点优先级更高:哪怕只出现一个 float,整个算术表达式结果就升为 float;出现 double,全部升为 double
- 字面量赋值特例:整数字面量(如 100)在 byte/short/char 范围内时,可直接赋值,不报错——这是编译器做的隐式窄化检查,仅限字面量,不适用于变量
强制转换:大转小,需手动且有风险
当目标类型容量更小时,必须显式加括号,例如 (int)3.14 或 (byte)200。但要注意:
- 小数部分直接截断,不四舍五入((int)9.99 得 9)
- 超出目标类型范围会溢出((byte)130 得 -126)
- boolean 类型完全不参与任何数值转换,既不能转成其他类型,也不能被其他类型转
- String 是引用类型,不能用 (int) 强转;要转数字需调用 Integer.parseInt() 等包装类方法
运算时的类型提升规则
混合运算不是简单“谁大听谁的”,而是按固定顺序逐级向上对齐:
- byte、short、char 运算前一律先转成 int(哪怕只有两个 byte 相加)
- 所有操作数中,只要有一个是 long,其余全转 long;有一个是 float,其余全转 float;有一个是 double,其余全转 double
- 缩略运算符(如 +=)会自动把结果强转回左边变量类型,等价于 a = (type)a + b
装箱与拆箱:基本类型 ↔ 包装类
这是另一层转换,由 Java 5+ 自动支持:
- 赋值或传参时,int 自动变 Integer,double 自动变 Double —— 叫自动装箱
- 反之,Integer 对象参与算术运算时自动取出 int 值 —— 叫自动拆箱
- 注意 null 拆箱会抛 NullPointerException,空值判断不能少

















