java类型转换是强类型语言的数据流动规则,分自动转换(小→大,安全)、强制转换(大→小,需校验)和运算隐式提升,boolean、对象、字符串与基本类型间不可直接转换。

Java 类型转换不是语法糖,而是强类型语言下数据流动的底层规则。掌握它,关键不在背顺序,而在理解“谁转谁、为何转、怎么不出错”。
自动转换:小范围→大范围,编译器默默帮你做
当 byte、short、char 或 int 参与运算或赋值给 long、float、double 时,Java 自动提升类型,不丢数据。
- byte b = 100; int i = b; ✅ 安全,b 自动变成 int
- char c = 'A'; int code = c; ✅ 输出 65,字符转 ASCII 码
- int a = 5; double d = a; ✅ d 得到 5.0,小数位补零
注意:byte、short、char 在算术表达式中一律先升为 int再计算。所以 byte x = 1, y = 2; byte z = x + y; 会编译失败——因为 x + y 结果是 int,不能直接赋给 byte。
强制转换:大范围→小范围,你得亲手把关
用 (目标类型)值 显式声明意图,但必须自己承担风险。
- double d = 3.9; int i = (int)d; → 得到 3(直接截断,不是四舍五入)
- int n = 200; byte b = (byte)n; → 得到 -56(超出 byte 范围 -128~127,按补码截断)
- long l = 100000L; int i = (int)l; → 若 l 超过 int 范围,结果溢出,不可逆
真正安全的做法:转换前先校验数值是否在目标类型范围内,或使用工具类如 Math.toIntExact()(溢出会抛异常)。
运算中的隐式提升:别被表面迷惑
表达式里混用不同类型,Java 按“最高优先级”统一升级后再算。
-
byte a = 10; short b = 20; int c = a + b;→ a 和 b 都先变 int,结果自然是 int -
int i = 10; float f = 3.14f; double d = i + f;→ i 升为 float,再升为 double,最终 d 是 double - 常量相加例外:
byte d = 3 + 4;编译通过,因为编译器提前算出 7,并确认在 byte 范围内
哪些绝对不能转?边界要清楚
类型转换有硬性禁区,违反直接编译报错。
-
boolean 不能和任何数字类型互转 ——
if (1)或boolean b = (boolean)0都非法 -
对象之间不能随意强转 ——
String s = "abc"; Integer i = (Integer)s;编译失败;只有继承关系且实际类型匹配时才可向下转型 -
字符串和其他基本类型不互通 —— 必须用
Integer.parseInt()或String.valueOf()等显式解析,不是类型转换
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











