文章出處

編程的時候可能會遇到一個不知道它屬于哪個類的對象,我們可以用下列運算符或者方法來判斷。

 1、instanceof

instanceof是運算符只被用于對象引用變量,檢查左邊的被測試對象是不是右邊類或接口的實例化。如果被測對象是null值,則測試結果總是false。 String str = new String("測試"); System.out.println(str instanceof String); //輸出true。

2、 isInstance(Object obj)

 isInstance(Object obj)方法,這個方法與instanceof等價,其中obj是被測試的對象,如果obj是調用這個方法的class或接口的實例,則返回true。 String str = new String("測試"); System.out.println(String.class.isInstance(str)); //輸出true。

3、isAssignableFrom

isAssignableFrom(Class cls)方法,如果調用這個方法的class或接口與參數cls表示的類或接口相同,或者是參數cls表示的類或接口的父類,則返回true。 System.out.println(String.class.isAssignableFrom(Object.class)); System.out.println(Object.class.isAssignableFrom(String.class)); //其中第一個輸出false,第二個輸出true。

 

4、附件:

Class.isAssignableFrom()是用來判斷一個類Class1和另一個類Class2是否相同或是另一個類的子類或接口。  
格式為:
        Class1.isAssignableFrom(Class2)  
  調用者和參數都是java.lang.Class類型。   
  而instanceof是用來判斷一個對象實例是否是一個類或接口的或其子類子接口的實例。  
  格式是:o instanceof TypeName     
  第一個參數是對象實例名,第二個參數是具體的類名或接口名,例如   String,InputStream。

Java代碼  收藏代碼
  1. package com.bill99.pattern;  
  2.   
  3. public class AssignableTest {  
  4.       
  5.     public AssignableTest(String name) {  
  6.     }  
  7.     /** 
  8.      * 判斷一個類是否是另一個類的父類 
  9.      * 是打印true 
  10.      * 否打印false 
  11.      */  
  12.     public static void testIsAssignedFrom1() {  
  13.         System.out.println("String是Object的父類:"+String.class.isAssignableFrom(Object.class));  
  14.     }  
  15.     /** 
  16.      * 判斷一個類是否是另一個類的父類 
  17.      * 是打印true 
  18.      * 否打印false 
  19.      */  
  20.     public static void testIsAssignedFrom2() {  
  21.         System.out.println("Object是String的父類:"+Object.class.isAssignableFrom(String.class));  
  22.     }  
  23.     /** 
  24.      * 判斷一個類是否和另一個類相同 
  25.      * 是打印true 
  26.      * 否打印false 
  27.      */  
  28.     public static void testIsAssignedFrom3() {  
  29.         System.out.println("Object和Object相同:"+Object.class.isAssignableFrom(Object.class));  
  30.     }  
  31.   
  32.     /** 
  33.      * 判斷str是否是Object類的實例 
  34.      * 是打印true 
  35.      * 否打印false 
  36.      */  
  37.     public static void testInstanceOf1() {  
  38.         String str = new String();  
  39.         System.out.print("str是Object的實例:");  
  40.         System.out.println(str instanceof Object);  
  41.     }  
  42.     /** 
  43.      * 判斷o是否是Object類的實例 
  44.      * 是打印true 
  45.      * 否打印false 
  46.      */  
  47.     public static void testInstanceOf2() {  
  48.         Object o = new Object();  
  49.         System.out.print("o是Object的實例:");  
  50.         System.out.println(o instanceof Object);  
  51.     }  
  52.       
  53.     public static void main(String[] args) {  
  54.         testIsAssignedFrom1();  
  55.         testIsAssignedFrom2();  
  56.         testIsAssignedFrom3();  
  57.         testInstanceOf1();  
  58.         testInstanceOf2();  
  59.     }  
  60. }  

 結果:

String是Object的父類:false
Object是String的父類:true
Object和Object相同:true
str是Object的實例:true
o是Object的實例:true

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()