Java Instanceof
Java Instanceof
Instanceof是一個非常簡單的運算符,前一個操作通常是一個引用類型的變量,后一個操作數通常是一個類(也可以是接口,可以把接口理解成一種特殊的類),它用于判斷前面的對象是否是后面的類或其子類,實現類的實例。如果是,返回true,否則,返回false。
public class InstanceTest {
???? public static void main(String[] args){
??? ? ?Object hello = "Hello";
??? ? ?System.out.println(hello instanceof Object);
??? ? ?System.out.println(hello instanceof String);
??? ? ?System.out.println(hello instanceof Math);
??? ? ?System.out.println(hello instanceof Comparable);
??? ? ?String str = "hello";
??? ? ?System.out.println(str instanceof Object);
??? ? ?//System.out.println(strinstanceof Math);
??? ? ?System.out.println(hello instanceof java.io.Serializable);
???? }
}
Output:
true
true
false
true
true
true
System.out.println(strinstanceof Math);則編譯錯誤是因為instanceof運算符有一個限制,編譯時類型必須是如下3種情況:
要么與后面的類相同;要么是后面類的子類;要么是后面類型的子類。
如果前面操作數的編譯時類型與后面的類型沒有任何關系,程序將沒發通過編譯。
在運行階段,被轉型變量所引用對象的實際類型必須是目標類型的實例,或者是目標類型的子類,實現類的實例,否則在運行時將引發ClassCastException異常。
public class InstanceTest {
???? public static void main(String[] args){
??? ? ?Object hello = "Hello";
??? ? ?String objStr = (String)hello;
??? ? ?System.out.println(objStr);
??? ? ?Object objPri = new Integer(5);
??? ? ?String str = (String)objPri;
??? ? ?String s ="Java";????
???? }
}
Exceptionin thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
Hello
????? at InstanceTest.main(InstanceTest.java:8)
無法從Integer轉換成String類型。
?
?
public class InstanceTest {
???? public static void main(String[]args){
??? ? ?String s = null;
??? ? ?System.out.println(s instanceof String);
???? }
}
False
S定義為null,雖然null可以作為所有引用類型變量的值,但對于s引用變量而言,它實際并未引用一個真正的String對象,因此程序輸出false。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java Instanceof的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 指针 和 数组
- 下一篇: 整理大数据期末考试复习提纲概念整理