java中判断基本类型需调用class.isprimitive():int.class、void.class返回true,integer.class、string.class、int[].class、void.class均返回false;实际通过field.gettype()等反射获取类型后判断。

Java 中判断一个类型是基本类型还是引用类型,关键在于检查它的 Class 对象是否为“原始类型”(primitive type)。反射本身不区分“函数类型”,而是通过字段、方法返回值或参数的 Class 对象来判断其底层类型归属。
看 Class 对象是否为基本类型
所有基本类型(int、boolean、char 等)在 JVM 中都有对应的包装类(Integer、Boolean、Character),但它们的 Class 对象行为不同:
-
int.class.isPrimitive()→ 返回 true -
Integer.class.isPrimitive()→ 返回 false -
String.class.isPrimitive()→ 返回 false -
void.class.isPrimitive()→ 返回 true(void是特例,也视为 primitive)
从字段或方法中获取类型再判断
实际开发中,我们通常不是直接写 int.class,而是从类结构中动态提取类型:
- 获取字段类型:
field.getType().isPrimitive() - 获取方法返回类型:
method.getReturnType().isPrimitive() - 获取方法参数类型:
parameter.getType().isPrimitive()
例如,对 private int age; 字段调用 getDeclaredField("age").getType().isPrimitive(),结果为 true;而对 private String name; 则返回 false。
注意包装类和基本类型的混淆
不能用 instanceof 或 == 比较包装类与基本类型,因为它们是完全不同的类:
-
Integer.class == int.class→ false -
Integer.class.isPrimitive()→ false -
int.class.isAssignableFrom(Integer.class)→ false(基本类型不参与继承关系)
如果想统一判断“是否属于基本类型或其包装类”,需额外逻辑:先用 isPrimitive(),再手动比对常见包装类(如 Integer.class、Boolean.class)。
常见误判点
以下情况容易出错,需特别留意:
-
Class.forName("java.lang.Integer")得到的是包装类,isPrimitive()为 false -
int[].class.isPrimitive()→ false(数组类型永远是引用类型,哪怕元素是基本类型) -
Void.class.isPrimitive()→ false,但void.class.isPrimitive()→ true











