第十四章 instanceod 与 isInstance

在运行时识别一个对象的类型:instanceof,其返回一个boolean值,表示对象是不是某个特定类型的实例。

用法:a instanceof B

表示:对象实例a是否属于类B

instanceof的使用由严格的限制,只可将其与命令类型进行比较,而不能与Class对象作比较。

package 类型信息.类的加载;

public class Fruit{

}

public class Apple extends Fruit{

}
package 类型信息.类的加载;

/**
 * a instanceof B  表示:对象x是不是某个特定类型B的实例[a是否从属于B]
 * 
 * a.getClass().isinstance(b)
 * 
 * @author admin
 *
 */
public class InstanceTest {

    public static void main(String[] args) {
        
        Apple a = new Apple();
        Fruit f = new Fruit();
        Fruit fru = new Apple();
        
        System.out.println(a instanceof Object);
        System.out.println(a instanceof Apple);
        System.out.println(a instanceof Fruit);
        System.out.println(f instanceof Apple);
        
    }
    
}

控制台:

true
true
true
false

class.isInstance(Object obj)相对于instanceof要灵活一些,至少你可以传递参数去判断某class是否属于参数指定的对象实例或类字面常量。

用法:A.class.isInstance(b)  或 a.getClass().isInstance(b),其中参数如果是类字面量或obj.getClass()这种用法没有任何意义。

 1 package 类型信息.类的加载;
 2 
 3 /**
 4  * a instanceof B  表示:对象x是不是某个特定类型B的实例[a是否从属于B]
 5  * 
 6  * a.getClass().isInstance(b) 或 A.Class.isInstance(b)
 7  * 
 8  * @author admin
 9  *
10  */
11 public class InstanceTest {
12 
13     public static void main(String[] args) {
14         
15         System.out.println("==========1==========");
16         
17         Apple a = new Apple();
18         Fruit f = new Fruit();
19         Fruit fru = new Apple();
20         
21         System.out.println(a instanceof Object);
22         System.out.println(a instanceof Apple);
23         System.out.println(a instanceof Fruit);
24         System.out.println(f instanceof Apple);
25         
26         System.out.println("==========2==========");
27         
28         System.out.println(Apple.class.isInstance(a));
29         System.out.println(Apple.class.isInstance(f));
30         System.out.println(Apple.class.isInstance(fru));
31         
32         System.out.println("==========3==========");
33         System.out.println(a.getClass().isInstance(a));
34         System.out.println(a.getClass().isInstance(f));
35         System.out.println(a.getClass().isInstance(fru));
36         
37     }
38     
39 }
==========1==========
true
true
true
false
==========2==========
true
false
true
==========3==========
true
false
true

从结果可以看出:使用isInstance(obj)方法其实比较的是对象引用是否从属于某个类,而不是比较对象是否从属于某类。

猜你喜欢

转载自www.cnblogs.com/liudaihuablogs/p/9325950.html