java如何识别类型
Java 类型识别方法
Java 提供了多种方式在运行时或编译时识别变量、对象或表达式的类型,以下是常见方法:
使用 instanceof 运算符
instanceof 用于检查对象是否为特定类或其子类的实例,返回布尔值:
Object obj = "Hello";
if (obj instanceof String) {
System.out.println("obj is a String");
}
通过 getClass() 方法
Object.getClass() 返回对象的运行时类对象,可与类字面量比较:

Integer num = 42;
Class<?> clazz = num.getClass();
System.out.println(clazz.getName()); // 输出 "java.lang.Integer"
使用 Class.isInstance()
通过 Class 对象的动态类型检查:
Class<?> stringClass = String.class;
Object obj = "Test";
if (stringClass.isInstance(obj)) {
System.out.println("obj is a String");
}
反射获取泛型类型
通过 Type 和 ParameterizedType 识别泛型的具体类型:

List<String> list = new ArrayList<>();
Type type = list.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type[] typeArgs = ((ParameterizedType) type).getActualTypeArguments();
System.out.println(typeArgs[0]); // 输出 "java.lang.String"
}
编译时类型推断
Java 编译器会根据上下文自动推断泛型或 var 声明的类型:
var list = Arrays.asList(1, 2, 3); // 推断为 List<Integer>
原始类型与包装类判断
通过 Class.isPrimitive() 检查原始类型:
int primitiveInt = 0;
Integer wrapperInt = 0;
System.out.println(int.class.isPrimitive()); // true
System.out.println(wrapperInt.getClass().isPrimitive()); // false
类型转换验证
通过强制转换结合异常处理验证类型:
Object obj = 123;
try {
String str = (String) obj; // 抛出 ClassCastException
} catch (ClassCastException e) {
System.out.println("类型不匹配");
}
注意事项
- 基本类型(如
int)与包装类(如Integer)在类型系统中属于不同类别 - 泛型类型擦除会导致运行时无法获取完整的泛型信息
instanceof不能用于基本类型或null检查






