Java类型转换核心是理解范围、精度与上下文:小转大自动(如byte→int),大转小需强制(可能截断或溢出),字符串与基本类型间须用API。

Java 类型转换不是语法技巧,而是对数据本质的理解过程。它围绕“范围”“精度”“上下文”三个核心展开——小范围转大范围可自动,大范围转小范围需显式,而字符串和基本类型之间则必须走标准 API。
自动类型转换:安全但不等于无损
当数据从取值范围小的类型赋值或参与运算到范围更大的类型时,Java 自动完成转换,路径固定:
- 整数链:byte → short → int → long → float → double
- 字符链:char → int → long → float → double
- 注意:byte、short、char 在算术运算中会直接提升为 int,再参与后续计算(哪怕只是两个 byte 相加)
- float 接收 long、double 接收 float 时虽合法,但可能因浮点表示限制丢失精度(如 long l = 999999999999999999L; float f = l; 结果未必等于原值)
强制类型转换:可控但高风险
必须显式书写 (目标类型) 表达式,常见陷阱包括:
- 截断而非四舍五入:double d = 123.789; int x = (int)d; → 得 123
- 溢出按补码截断:int big = 200; byte b = (byte)big; → 得 -56(因 byte 范围是 [-128, 127])
- char 溢出静默失败:char c = (char)65536; → 实际得到 '\u0000'(65536 % 65536 = 0)
- 建议在强制转换前做范围校验,尤其处理外部输入时:if (value >= Byte.MIN_VALUE && value
字符串 ↔ 基本类型:必须用工具类
Java 不允许直接写 (int)"123" 或 int i = "123";。所有转换必须经由标准方法:
立即学习“Java免费学习笔记(深入)”;
- 字符串 → 基本类型:Integer.parseInt("123")、Double.parseDouble("3.14")、Boolean.parseBoolean("true")
- 基本类型 → 字符串:String.valueOf(123)、Integer.toString(123)、123 + ""(隐式调用 toString)
- 注意:parseXXX 方法遇到非法格式会抛 NumberFormatException;valueOf 返回的是包装类对象,需 .xxxValue() 才得基本类型
装箱与拆箱:自动但有坑
Java 5+ 支持自动装箱(基本类型 → 包装类)和拆箱(包装类 → 基本类型),例如:
- Integer i = 100; // 装箱,等价于 Integer.valueOf(100)
- int x = i; // 拆箱,等价于 i.intValue()
- 陷阱:Integer 对象在 [-128, 127] 范围内会被缓存,超出该范围则每次 new 新对象,所以 Integer a = 128; Integer b = 128; System.out.println(a == b); // false
- 空指针风险:Integer i = null; int x = i; → 抛 NullPointerException


















