Java类型转换分自动和强制两类:小范围转大范围自动完成,如byte→int;大范围转小范围需显式强转,如double→int;字符串与基本类型互转须用包装类方法;引用类型子类转父类自动,父类转子类需强转并用instanceof防护。

Java 中的类型转换分两种:一种是编译器悄悄帮你做的,叫自动类型转换;另一种是你自己明确写出来的,叫强制类型转换。关键看数据范围大小——小范围往大范围走,安全,自动完成;大范围往小范围走,有风险,必须手动干预。
自动类型转换:小转大,编译器自动搞定
只要源类型取值范围完全被目标类型覆盖,Java 就会在赋值、运算或方法调用时自动提升。比如 byte → int、int → long、int → double、char → int 都属于这一类。
- 整数类型默认按 byte → short → char → int → long → float → double 顺序升级
- 所有 byte、short、char 在算术运算中都会先提升为 int(哪怕只是两个 byte 相加)
- 混合运算时,以参与运算中最高精度类型为准:int + double → 全部转成 double 再算
- 方法参数匹配时也会触发:传 short 给接收 int 的参数,自动转
强制类型转换:大转小,必须显式声明
当你需要把 long 赋给 int、double 转成 float 或 int,就得用 (目标类型) 语法。这不是编译器“帮忙”,而是你主动承担风险。
- 语法格式:目标类型 变量 = (目标类型)源值;,例如
int i = (int)12.8; - 小数部分直接截断,不四舍五入:
(int)9.9结果是 9 - 超出目标类型范围会溢出:比如
(int)3000000000L得到负数 - byte/short 运算后想存回原类型,必须强转:
byte b1 = 10, b2 = 20; byte b3 = (byte)(b1 + b2);
字符串与基本类型互转:不能靠自动或强制,得靠包装类
String 和 int、double 等之间没有继承或大小关系,所以既不能自动转,也不能用 (int) 强转——那样会编译报错。
立即学习“Java免费学习笔记(深入)”;
- 字符串 → 基本类型:
Integer.parseInt("123")、Double.parseDouble("3.14") - 基本类型 → 字符串:
String.valueOf(42)、"" + 42或直接用Integer.toString(42) - 注意空字符串或非法格式会抛
NumberFormatException,建议加 try-catch
引用类型转换:子类转父类自动,父类转子类需强转+instanceof防护
对象类型转换不是看字节大小,而是看类继承关系。
- 子类实例赋给父类变量:自动向上转型,安全,如
Animal a = new Dog(); - 父类变量转回子类:必须强转,且运行时实际对象要是该子类,否则抛
ClassCastException - 强转前建议用
if (obj instanceof Dog)判断,避免崩溃


















