instanceof 返回 false 的情况有三类:右边为基本类型(编译报错)、左边为 null(恒为 false)、左右无继承/实现关系(安全返回 false);它不能用于泛型类型擦除后的精确匹配,也不支持运行时 Class 变量。
instanceof 只能判断对象是否为某类或其子类的实例,不能用于基本类型、null,也不能在编译期做泛型类型擦除后的精确匹配。
什么时候 instanceof 会返回 false
常见误判场景集中在三类情况:
- 右边类型是基本类型(如
int、boolean)——编译直接报错:Incompatible types: int is not a reference type - 左边表达式结果为
null——无论右边是什么类,结果恒为false(不是异常,是定义行为) - 右边是与左边完全无关的类,且无继承/实现关系(如
new String() instanceof java.util.List)——安全,返回false
instanceof 和强制类型转换的配合写法
单独用 instanceof 没意义,真正价值在于避免 ClassCastException。但注意 Java 14+ 支持模式匹配语法,可省去重复变量名:
if (obj instanceof String s) {
System.out.println(s.length()); // s 已自动强转并作用域有效
}
Java 14 之前必须手动转换: