instanceof是java中用于安全类型检查的关键字,可避免classcastexception和nullpointerexception;仅适用于引用类型,不支持基本类型和泛型类型擦除后的变量。

instanceof 是 Java 中用于类型检查的关键字,它能在强制类型转换前安全判断对象是否属于某个类或其实现的接口。用它做前置校验,能有效避免 ClassCastException。
先判断再强转:基本写法
直接在 if 条件中使用 instanceof,确认类型匹配后再执行强转:
- 语法格式:
if (obj instanceof TargetType) - 成立时说明
obj非 null 且是TargetType类型(或其子类/实现类) - 此时再强转是安全的,JVM 不会抛出异常
避免空指针与类型不匹配双重风险
instanceof 对 null 返回 false,天然规避了对 null 值强转导致的 NullPointerException 和 ClassCastException:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 比如:
String s = null; System.out.println(s instanceof Integer); // false - 所以无需额外判空,
instanceof本身已包含安全边界 - 若跳过检查直接强转 null,运行时仍会报
NullPointerException(不是ClassCastException),但逻辑上已出错
配合泛型或集合取值时特别有用
从 Object 类型集合(如 List<object></object> 或旧版未泛型的 ArrayList)中取元素时,常需还原真实类型:
- 错误示范:
String s = (String) list.get(0); // 可能 ClassCastException - 正确做法:
if (list.get(0) instanceof String) { String s = (String) list.get(0); } - Java 14+ 还支持模式匹配简化写法:
if (obj instanceof String s) { /* s 已自动强转并声明 */ }
注意不能用于基本类型和类型变量
instanceof 只适用于引用类型:
- 不支持基本类型:
int i = 5; i instanceof Integer编译报错 - 不支持泛型类型擦除后的变量:
if (list instanceof List<string>)</string>编译失败(类型信息在运行时不存在) - 可改用
getClass() == xxx.class做精确类比(但不包含继承关系)










