类型信息之instanceof、isInstance与isAssignableFrom

Java中RTTI部分判断对象是不是某个特定类型的实例的方式包括instanceof、isInstance与isAssignableFrom。

查看JDK API文档可知:
instanceof是一个二元操作符:
boolean result = object instanceof class
判定object 是不是class或其子类的实例对象。

isInstance(Object obj) 是动态的instanceof:
判定指定的 Object 是否与此 Class 所表示的对象赋值兼容,返回一个boolean值。

isAssignableFrom(Class<?> cls)
判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。

class A{}
class AA extends A{}
public class Test{
    static void print(Boolean b){
        System.out.println(b);
    }
public static void main(String[] args){
        A a= new A();
        AA aa=new AA();

        print(a instanceof A);
        print(a instanceof AA);
        print(aa instanceof A);
        print(aa instanceof AA);

        System.out.println();

        print(A.class.isInstance(a));
        print(A.class.isInstance(aa));
        print(AA.class.isInstance(a));  
        print(AA.class.isInstance(aa));

        System.out.println();

        print(A.class.isAssignableFrom(A.class));
        print(A.class.isAssignableFrom(AA.class));
        print(AA.class.isAssignableFrom(A.class));
        print(A.class.isAssignableFrom(AA.class));  
    }
}

输出:
instanceof:
true
false
true
true

isInstance:
true
true
false
true

isAssignableFrom:
true
true
false
true

总结
object instanceof class:判定object 对象是否属于class类或其子类,这里class是类名;

Class.isInstance(Object obj):与instanceof等价,判定object 对象是否属于Class类或其子类,这里Class不是类名,是Class对象的引用(如:A.class);

Class.isAssignableFrom(Class<?> cls):判定Class cls(参数)是否是Class类(左)或其子类,这里均为Class对象的引用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值