java 型別資訊 instanceof 和 isInstance區別
- class A{
- }
- class B extends A {
- }
- class C extends B {
- }
- public class tt {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- C c = new C();
- B b = new B();
- A a = new A();
- B bc = new C();
- A ac = new C();
- System.out.println(c instanceof C);
- System.out.println(c instanceof B);
- System.out.println(c instanceof A);
- System.out.println();
- System.out.println(c.getClass().isInstance(c));
- System.out.println(c.getClass().isInstance(b));
- System.out.println(c.getClass().isInstance(a));
- System.out.println();
- System.out.println(c.getClass().isInstance(bc));
- System.out.println(c.getClass().isInstance(ac));
- System.out.println();
- System.out.println(A.class.isInstance(a));
- System.out.println(A.class.isInstance(b));
- System.out.println(A.class.isInstance(c));
- System.out.println(A.class.isInstance(ac));
- System.out.println(A.class.isInstance(bc));
- System.out.println();
- System.out.println(B.class.isInstance(a));
- System.out.println(B.class.isInstance(b));
- System.out.println(B.class.isInstance(c));
- System.out.println(B.class.isInstance(ac));
- System.out.println(B.class.isInstance(bc));
- }
- }
true
true
true
true
false
false
true
true
true
true
true
true
true
false
true
true
true
true
物件 instanceof 類
obj instanceof class
如果class obj1 = obj成立的話,返回true,否則返回false
類.isInstance(物件)
class.isInstance(obj)
如果class obj1 = obj成立的話,返回true,否則返回false
看到更形象的解釋
instanceof運算子 只被用於物件引用變數,檢查左邊的被測試物件 是不是 右邊類或介面的 例項化。如果被測物件是null值,則測試結果總是false。
形象地:自身例項或子類例項 instanceof 自身類 返回true
例: String s=new String("javaisland");
System.out.println(s instanceof String); //true
Class類的isInstance(Object obj)方法,obj是被測試的物件,如果obj是呼叫這個方法的class或介面 的例項,則返回true。這個方法是instanceof運算子的動態等價。
形象地:自身類.class.isInstance(自身例項或子類例項) 返回true
例:String s=new String("javaisland");
System.out.println(String.class.isInstance(s)); //true
Class類的isAssignableFrom(Class cls)方法,如果呼叫這個方法的class或介面 與 引數cls表示的類或介面相同,或者是引數cls表示的類或介面的父類,則返回true。
形象地:自身類.class.isAssignableFrom(自身類或子類.class) 返回true
例:System.out.println(ArrayList.class.isAssignableFrom(Object.class)); //false
System.out.println(Object.class.isAssignableFrom(ArrayList.class)); //true
相關文章
- 高階JAVA碼農必須搞清楚它們的區別:instanceof、isInstance、isAssignableFromJava
- instanceof和typeof的區別
- python的type和isinstance的區別Python
- java-----instanceof與getClass的區別Java
- js--typeof 和 instanceof 判斷資料型別的區別及開發中的使用JS資料型別
- Java中基本資料型別和包裝型別有什麼區別?Java資料型別
- 區別值型別資料和引用型別資料型別
- js基本型別和引用型別區別JS型別
- python中isinstance()和type()有什麼區別?如何使用?Python
- JAVA中基本資料型別和引用資料型別Java資料型別
- Java 型別資訊詳解和反射機制Java型別反射
- Class.isAssignableFrom與instanceof的區別
- c#中值型別和引用型別的區別C#型別
- Java的基本型別和引用型別Java型別
- JS-資料型別- typeof/instanceof/Object.prototype.toStringJS資料型別Object
- 基礎-JAVA集合型別主要區別Java型別
- python學習之isinstance與type的區別Python
- Java 資料型別和 MySql 資料型別對應一覽表JavaMySQL 資料型別
- 從賦值看基本型別和引用型別的區別賦值型別
- Java入門系列-05-資料型別和型別轉換Java資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- Java資料型別及型別轉換Java資料型別
- Java基礎-基本型別和包裝型別Java型別
- java泛型中<?>和<T>有什麼區別?Java泛型
- java基本型別和包裝型別的“==”和equals()方法Java型別
- Golang的值型別和引用型別的範圍、儲存區域、區別Golang型別
- rust trait 關聯型別和泛型的區別RustAI型別泛型
- Java資料型別Java資料型別
- scala和java資料型別轉換Java資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- JS 的型別(null 和 undefined 的區別)JS型別NullUndefined
- 值型別與引用型別的區別型別
- Java資料型別、識別符號Java資料型別符號
- Java泛型T與?的區別Java泛型
- java中==和equlas區別Java
- java:Date和DateTime區別Java
- 【Java】equals 和 == 的區別Java
- Java中的資料型別和運算子Java資料型別
- JAVA基礎--資料型別和運算子Java資料型別