java类型转换是日常编码必备基础,核心原则为小转大自动安全、大转小需显式且谨慎;涉及基本类型隐式/显式转换、字符串与数字互转、包装类装箱拆箱及对应风险。

Java 类型转换不是可选项,而是日常编码中绕不开的基础动作。它既影响数值精度,也决定程序是否能编译通过、运行正确。核心就两点:小转大自动安全,大转小必须显式且小心。
基本类型自动转换(隐式)
当小范围类型值赋给大范围类型变量时,编译器自动完成,不丢数据、不写括号。
- 常见路径:byte/short/char → int → long → float → double
- char 虽是字符,但参与运算时按 Unicode 数值处理,自动升为 int
- 表达式中所有 byte、short、char 都先提升为 int 再计算,哪怕结果存入 long 也不跳过这步
- 字面量有默认类型:100 是 int,3.14 是 double,写 100L 或 3.14f 才指定为 long 或 float
基本类型强制转换(显式)
把大范围类型转成小范围类型时,必须加 (目标类型) 显式声明,否则编译失败。
- 语法:int i = (int) 9.87; // 得 9,小数部分直接截断
- 风险明显:long l = 20000000000L; byte b = (byte) l; // 结果可能溢出,变成负数
- 安全做法:转换前做范围检查,比如用 Byte.MIN_VALUE / Byte.MAX_VALUE 判断
- 布尔类型不能参与任何数值转换,也不能转成其他基本类型
字符串与基本类型的互转
字符串和数字之间没有自动转换,必须调用方法,这是新手常踩的坑。
- 基本类型 → 字符串:String.valueOf(123) 或 123 + ""(后者依赖 + 的字符串连接逻辑)
- 字符串 → 基本类型:Integer.parseInt("123")、Double.parseDouble("3.14"),注意空或非法格式会抛 NumberFormatException
- 包装类提供更灵活入口:Integer.valueOf("123") 返回 Integer 对象;Character.getNumericValue('5') 可转单字符为数字
包装类与基本类型的转换
Java 5 起支持自动装箱/拆箱,让 Integer 和 int 之间看起来“无缝”,但背后有细节要注意。
- 自动发生:Integer i = 100; int j = i; —— 编译器悄悄插入 intValue() 和 valueOf()
- 缓存陷阱:Integer.valueOf(-128 到 127) 返回缓存对象,超出范围则新建对象,影响 == 比较结果
- null 风险:Integer i = null; int j = i; 运行时报 NullPointerException,拆箱时无法处理 null
- 显式调用更可控:用 Integer.parseInt() 替代 (int) new Integer("123"),后者已过时
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











