Java instanceof 和 Class.isInstance()区别与应用

instanceof 关键字用于判断某个实例是否是某个类的实例化对象,形如:

String.class instanceof Class
"test" instanceof String

二、isInstance()方法

isInstance是Class类中的方法,也是用于判断某个实例是否是某个类的实例化对象,但是指向则相反。

但这样就带来一个疑问,为什么我们需要这个方法呢,官方文档如此解释:

有了这点特性,我们可以在运行时判断两个类是否可以相互强转。

 三、示例用法

public static void main(String[] args) {
        System.out.println("\"test\" instance of String:"+("test" instanceof String));
        System.out.println("\"test\" instance of Object:"+("test" instanceof Object));
        System.out.println("\"test\".getClass().isInstance(Object.class):"+("test".getClass().isInstance(Object.class)));
        System.out.println("\"test\".getClass().isInstance(String.class):"+("test".getClass().isInstance(String.class)));
        System.out.println("String.class.isInstance(Object.class):"+(String.class.isInstance(Object.class)));
        System.out.println("String.class.isInstance(String.class):"+(String.class.isInstance(String.class)));

        System.out.println("String.class.isInstance(\"test\"):"+(String.class.isInstance("test")));


        System.out.println("Object.class.isInstance(\"test\"):"+(Object.class.isInstance("test")));
        Object object="ok";
        System.out.println("Double.class.isInstance(\"test\"):"+(Double.class.isInstance("test")));

        Set<?> a=new HashSet<String>();
        Set<String> b=new HashSet<String>();
        System.out.println("a is b:"+aIsB(a,b));
    }
   

    static boolean  aIsB(Object a,Object b){
        return a.getClass().isInstance(b);
    }

输出:

"test" instance of String:true
"test" instance of Object:true
"test".getClass().isInstance(Object.class):false
"test".getClass().isInstance(String.class):false
String.class.isInstance(Object.class):false
String.class.isInstance(String.class):false
String.class.isInstance("test"):true
Object.class.isInstance("test"):true
Double.class.isInstance("test"):false
a is b:true

猜你喜欢

转载自www.linuxidc.com/Linux/2019-10/161182.htm
今日推荐