class A {}
class B {}
public class Demo {
public static void main(String[] args) {
A a = new A();
System.out.println(a instanceof B);
}
}
此代碼給出編譯時錯誤。 如何使用instanceof
在object不是指定類的實例時給出false而不是編譯時錯誤。java中的運算符實例
class A {}
class B {}
public class Demo {
public static void main(String[] args) {
A a = new A();
System.out.println(a instanceof B);
}
}
此代碼給出編譯時錯誤。 如何使用instanceof
在object不是指定類的實例時給出false而不是編譯時錯誤。java中的運算符實例
Java知道A
不能是B
所以它不會編譯。如果更改行
Object a = new A();
它會編譯(並返回false),因爲它不再能告訴我們,如果一個Object
可以轉換成B
類型。
我的意思是說如果對象是一個類的實例,那麼它的真實性就是真,如果不是,則爲false。但是當我嘗試第二種情況時,它不是給虛假給編譯時錯誤.......但由於定義說它有兩個值true和false,並且如果object不是類的一個實例,所以如果得到錯誤,它會給出false。 – Ankit
當您將它與不相關的類型一起使用時,它永遠不會編譯。 'instanceof'適用於有問題的對象可以合法地成爲你正在測試的類型的情況。 'myBird instanceof Eagle' – hughjdavey
@Ankit因爲編譯器知道根據類型A(與B無關)的規範變量不能容納B的實例,所以這樣的測試永遠不會返回true,所以即使寫入也沒有意義它。編寫這樣的代碼很可能基於不正確的假設,所以最好現在停止程序員而不是讓他錯誤。 – Pshemo
您可以使用此:
System.out.println(a.getClass().equals(B.class));
相反的:
System.out.println(a instanceof B);
thanx ....這對我來說是新的 – Ankit
這不是相同。例如,'「」.getClass()。equals(Object.class)'爲false,但是''「instanceof Object'爲true。 'instanceof'匹配子類,'equals'不匹配。 –
如果class A
和B
通過繼承是不相關的,那麼當你嘗試執行a instanceof B
就你而言,A
不是B
的子類,所以你可以「T做一個instanceof
檢查像a instanceof B
但是,如果你改變你的類象下面這樣:
class A {}
class B extends A {}
public static void main(String[] args) {
B b=new B();
System.out.println(b instanceof A);
}
現在b instanceof A
將返回true
因爲B
IS-A(類型)A
您可以閱讀關於相同主題的Java doc here:
instanceof運算符將對象與指定類型進行比較。您可以使用它來測試對象是否是類的實例,子類的實例 或者實現特定接口的類的實例。
非常感謝你 – Ankit
如果
RelationalExpression
到ReferenceType
的鑄造(§15.16)將被拒絕作爲一個編譯時間錯誤,那麼instanceof
關係式同樣產生一個編譯時間錯誤。在這種情況下,instanceof
表達式的結果永遠不會成立。
(如果它們被描述RelationalExpression instanceof ReferenceType
)
你不能寫B b = (B) a;
要麼,因爲A
和B
都是類(*),並且是不相關的,在這個意義上A
直接或間接不擴展B
,反之亦然。
因此,對A
的引用永遠不能包含B
的實例,因此對此進行測試是無意義的。因此,編譯器會阻止您對此進行測試,因爲它可能表示出現邏輯錯誤。
(*),你可以寫a instanceof B
如果B
是一個接口,因爲a
可能指的A
子類,還實現了B
,例如
class ChildOfA extends A implements B {}
A a = new ChildOfA();
System.out.println(a instanceof B); // fine.
您是否在同一個文件中編譯了'class A'和'class B'? –
嘗試用'Object a = new A();' – Pshemo