java中类型转换需遵循规则:基本类型与包装类支持自动装箱/拆箱,但null拆箱抛npe;基本类型与字符串须显式调用valueof()或parsexxx();引用类型仅限继承/实现关系间转换;boolean不可与其他类型互转,char仅能自动转为int、long、float、double。

Java里引用类型和基本类型之间的转换,不是靠“强制造型”就能随便转的,得按规则来——有些能自动完成,有些必须手动处理,还有些根本不能转。
基本类型 ↔ 包装类:自动装箱/拆箱
Java为每种基本类型都提供了对应的包装类(如 int ↔ Integer、boolean ↔ Boolean),它们之间支持自动转换:
- 赋值时自动装箱:int i = 10; Integer obj = i; // 自动把 int 转成 Integer 对象
- 使用时自动拆箱:Integer obj = 100; int j = obj; // 自动把 Integer 拆成 int 值
- 注意 null 拆箱会抛 NullPointerException:Integer x = null; int y = x; // 运行时报错
- 推荐用 valueOf() 而非 new:Integer a = Integer.valueOf(123); 比 new Integer(123) 更高效(复用缓存)
基本类型 ↔ 字符串:需显式调用工具方法
字符串和基本类型互转不支持自动转换,必须调用包装类提供的静态方法:
- 基本类型 → String:String s = String.valueOf(42); 或 Integer.toString(42); 或 "" + 42
- String → 基本类型:int i = Integer.parseInt("123"); double d = Double.parseDouble("3.14");
- parseXxx() 方法遇到非法格式会抛 NumberFormatException,建议配合 try-catch 使用
- valueOf() 返回的是包装类对象(如 Integer),而 parseXxx() 返回的是基本类型值(如 int)
引用类型之间转换:只限继承/实现关系
两个引用类型能否转换,取决于它们是否有父子类或实现关系,和数值大小无关:
- 向上转型(子类→父类)自动发生:Dog d = new Dog(); Animal a = d; // 安全,无需括号
- 向下转型(父类→子类)必须强制且检查:if (a instanceof Dog) { Dog dd = (Dog) a; }
- 没有继承关系的类之间不能转换:String 和 ArrayList 互转会编译失败
- 接口与实现类之间同理:List
list = new ArrayList(); ArrayList al = (ArrayList ) list;
特别注意:boolean 和 char 的边界限制
这两类基本类型在转换中存在硬性约束,容易踩坑:
- boolean 不能和任何其他基本类型互转:既不能转成 int,也不能转成 String(除非手动映射 "true"/"false")
- char 虽然本质是无符号16位整数,但只能自动转成 int、long、float、double;不能直接转成 byte 或 short(需强制)
- char c = 'A'; int i = c; // ✅ 合法,i = 65
- int i = 65; char c = (char) i; // ✅ 强制合法
- int i = 300; char c = (char) i; // ⚠️ 编译通过,但结果是 '\u012C',不是预期字符
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











