Java类型转换核心是安全与风险控制:小范围自动转大范围,大范围转小必须显式强制且承担截断、溢出等风险;boolean不可转任何类型,字符串与数字互转需工具方法并处理异常;包装类自动装箱拆箱便利但null易引发NPE。

Java 类型转换不是“能不能转”的问题,而是“怎么转才不丢数据、不崩溃、不误导逻辑”的问题。核心就两条:小范围自动升大范围,大范围变小必须手动截断并承担风险。
基本类型自动转换:小转大,安全无感
当 byte → short → int → long → float → double 或 char → int → long 这类路径中,左侧类型能完整容纳右侧值时,编译器自动完成,不报错也不需括号。
- 赋值时发生:int i = 100; long l = i; ✅
- 运算时统一提升:byte b = 10; int result = b + 20; → b 自动转 int 再计算
- 方法调用匹配:参数是 int,传 short 或 char,自动转 ✅
- 注意 float 虽只有 4 字节,但可接收 long 整数(可能丢失精度),也算自动转换
基本类型强制转换:大转小,必须显式且谨慎
把 double 赋给 int、long 赋给 byte 这类操作,必须加 (int)、(byte) 等括号,编译器放行但不保结果合理。
- 截断而非四舍五入:(int) 4.99 → 4
- 溢出按补码规则:(byte) 257 → 1(因为 257 % 256 = 1),(byte) 130 → -126
- char 和 int 可双向转,但 int → char 必须强制:(char) 65 → 'A'
- boolean 与任何类型都不可转换,连强制也不允许
字符串与数字互转:靠工具方法,不是 cast
String 不是基本类型,和数字互转属于逻辑转换,必须调用包装类方法,且随时可能抛异常。
立即学习“Java免费学习笔记(深入)”;
- 数字转字符串:推荐 String.valueOf(123),它对 null 返回 "null";Integer.toString(123) 更严格,null 会抛 NullPointerException
- 字符串转数字:Integer.parseInt("123")、Double.parseDouble("3.14") 是标准写法,但 "abc" 或空串会直接触发 NumberFormatException
- 稳妥做法:先用正则校验格式(如 ^-?\d+$),再 parse;或始终包裹 try-catch
包装类与基本类型:自动装箱拆箱方便,但 null 是雷
Integer、Double 等让基本类型具备对象能力,它们和对应基本类型之间有自动桥接机制,但也埋着空指针隐患。
- 自动装箱:Integer i = 100; 编译器实际调用 Integer.valueOf(100)
- 自动拆箱:int x = i; 实际调用 i.intValue(),但如果 i 是 null,立刻抛 NullPointerException
- 手动更可控:valueOf() 比 new Integer() 好(缓存 -128~127),booleanValue()、doubleValue() 等方法语义清晰
- 集合、泛型场景下务必检查 null,避免拆箱时崩掉


















