instanceof和相关函数

时间:2021-08-18 13:53:13

instanceof:如果左边对象是右边类型所表示类(或任意一子类)的一个实例,则返回true,否则false。判断左边真实类型是不是右边的类或它的派生类。

        //实例一
Object o= new Long(112);
if(o instanceof Long){
System.out.println(true);//ok
}else{
System.out.println(false);
}
//实例二
if(new Object() instanceof Long){
System.out.println(true);
}else{
System.out.println(false);//ok
}

关于instanceof的底层实现推荐阅读:

java中关于instanceof 的问题? - 回答作者: RednaxelaFX

Java instanceof 关键字是如何实现的? - 回答作者: RednaxelaFX

instanceof的使用限制比较严格(只可将某对象与命名类型进行比较,而不能与Class对象作比较),作为替代品Class的isInstance()方法相对更灵活。

public boolean isInstance(Object obj):

判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法。如果指定的 Object 参数非空,且能够在不引发 ClassCastException 的情况下被强制转换成该 Class 对象所表示的引用类型,则该方法返回 true;否则返回 false

特别地,当该 Class 对象表示一个已声明的类时,若指定的 Object 参数是所表示类(或其任一子类)的一个实例,则此方法返回 true;否则返回 false。如果此 Class 对象表示一个数组类,且通过身份转换或扩展引用转换,指定的 Object 参数能转换为一个数组类的对象,则返回 true;否则返回 false。如果此 Class 对象表示一个接口,且指定 Object 参数的类或任一超类实现了此接口,则此方法返回 true;否则返回 false。如果此 Class 对象表示一个基本类型,则此方法返回 false

参数:

obj - 要检查的对象

返回:

如果 obj 是此类的实例,则返回 true

另外Class还有一个很有用的函数isAssignableFrom。

public boolean isAssignableFrom(Class<?> cls): 此方法能测试指定 Class 参数所表示的类型能否转换为此 Class 对象所表示的类型。

判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回 true;否则返回 false。如果该 Class 表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true;否则返回 false

特别地,通过身份转换或扩展引用转换,此方法能测试指定 Class 参数所表示的类型能否转换为此 Class 对象所表示的类型。有关详细信息,请参阅 Java Language Specification 的第 5.1.1 和 5.1.4 节。

参数:

cls - 要检查的 Class 对象

返回:

表明 cls 类型的对象能否赋予此类对象的 boolean

抛出:

NullPointerException - 如果指定的 Class 参数为 null。