java中基本类型通过.type.class获取class对象,包装类通过.class、getclass()或class.forname()获取;integer.type等价于int.class,但integer.class不等于int.class。

Java 中基本数据类型(如 int、char、boolean 等)和它们对应的包装类(如 Integer、Character、Boolean 等)都能获取到 Class 对象,但方式略有不同。关键在于:基本类型本身没有“实例”,但 JVM 为每种基本类型和 void 都预定义了唯一的 Class 实例;而包装类是普通引用类型,其 Class 获取方式与其他类一致。
基本数据类型获取 Class 对象
直接使用 .class 后缀即可,这是最简洁、推荐的方式:
-
int.class→ 返回代表 int 类型的 Class 对象(输出为int) -
double.class、boolean.class、void.class同理 - 注意:
int.class != Integer.class,前者是基本类型,后者是引用类型
包装类获取 Class 对象
包装类作为普通类,有三种标准方式,任选其一:
-
Integer.class—— 编译期确定,最安全高效 -
new Integer(0).getClass()—— 通过实例调用,适用于已有对象的场景 -
Class.forName("java.lang.Integer")—— 运行时动态加载,需处理ClassNotFoundException
包装类与对应基本类型的 Class 是否等价?
不完全等价,但有明确映射关系:
-
Integer.TYPE是int.class的别名,二者完全相等(Integer.TYPE == int.class返回true) - 同理:
Character.TYPE == char.class,Boolean.TYPE == boolean.class等 - 但
Integer.class表示的是 Integer 类本身,不是基本类型,所以Integer.class != int.class
常见误用与注意事项
避免以下典型错误:
- 对基本类型调用
.getClass()—— 编译不通过(例如5.getClass()报错),因为基本类型不是对象 - 混淆
Integer.class和Integer.TYPE:前者用于反射操作包装类,后者用于匹配基本类型语义 -
void.class是合法的,常用于反射中判断方法返回类型是否为 void
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











