java基本数据类型转换分三类:数值间自动/强制转换、基本类型与字符串互转、基本类型与包装类互转;核心是小范围→大范围自动安全,大→小需显式转换且可能丢数据。

Java 基本数据类型转换分三类场景:数值间自动/强制转换、基本类型与字符串互转、基本类型与包装类互转。核心原则是小范围 → 大范围自动安全,大范围 → 小范围需显式操作且可能丢数据。
数值类型之间的自动与强制转换
Java 8 种基本类型存在隐含容量顺序:byte → short → char → int → long → float → double(注意:char 和 short 虽同为 2 字节,但不兼容,不能自动互转)。
自动转换(隐式)发生在赋值或运算中,当源类型范围 ≤ 目标类型时,编译器自动完成:
- int i = 100; long l = i; // ✅ 安全,int → long
- char c = 'Z'; int code = c; // ✅ char → int(得 ASCII 码 90)
- int a = 5; double b = 3.14; double sum = a + b; // ✅ a 自动提升为 double 再运算
强制转换(显式)必须加括号,用于大→小转换,但有风险:
- double d = 9.99; int n = (int) d; // 结果是 9(小数直接截断,不四舍五入)
- int x = 300; byte b = (byte) x; // 结果是 44?错,Java byte 有符号,300 的低 8 位补码是 -56
- short s = 10; s = (short) (s * 2); // ⚠️ s * 2 默认是 int,不强转会编译失败
特别注意:boolean 不能和任何数值类型互转,如 (int) true 或 if(1) 都编译报错。
基本类型与字符串互相转换
字符串不是基本类型,转换不靠 cast,而依赖工具方法,且必须处理异常。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
转成字符串(推荐安全方式):
- String.valueOf(123) —— 支持 null,传 null 返回字符串 "null"
- Integer.toString(123) —— 不支持 null,传 null 抛 NullPointerException
- 123 + "" —— 简便但底层调用 valueOf,语义稍弱
字符串转数字(务必防异常):
- Integer.parseInt("123") —— 输入非法(如 "abc"、""、null)直接抛 NumberFormatException
- 稳妥写法:先校验格式(如用正则 ^-?\d+$),再 parse;或包裹 try-catch
- 避免 new Integer("123") —— 已过时,且不复用缓存
基本类型与包装类的装箱与拆箱
Java 5+ 支持自动装箱(基本 → 包装)和拆箱(包装 → 基本),但要注意空指针和缓存陷阱。
自动方式(简洁但有隐患):
- Integer i = 100; // ✅ 自动装箱,实际调用 Integer.valueOf(100)
- int x = i; // ✅ 自动拆箱,实际调用 i.intValue()
- Integer j = null; int y = j; // ❌ 运行时报 NullPointerException
手动方式(更可控):
- Integer obj = Integer.valueOf(100); // 推荐,-128 ~ 127 范围内复用缓存对象
- int v = obj.intValue(); // 明确意图,避免空指针前可判 null
- Boolean.parseBoolean("true") 返回 boolean 值;Boolean.valueOf("true") 返回 Boolean 对象
所有包装类都遵循类似逻辑:valueOf() 比 new 更优,xxxValue() 方法用于拆箱,parseXXX() 专用于字符串解析。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










