Java Instanceof
Java Instanceof
Instanceof是一個(gè)非常簡單的運(yùn)算符,前一個(gè)操作通常是一個(gè)引用類型的變量,后一個(gè)操作數(shù)通常是一個(gè)類(也可以是接口,可以把接口理解成一種特殊的類),它用于判斷前面的對象是否是后面的類或其子類,實(shí)現(xiàn)類的實(shí)例。如果是,返回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);則編譯錯(cuò)誤是因?yàn)閕nstanceof運(yùn)算符有一個(gè)限制,編譯時(shí)類型必須是如下3種情況:
要么與后面的類相同;要么是后面類的子類;要么是后面類型的子類。
如果前面操作數(shù)的編譯時(shí)類型與后面的類型沒有任何關(guān)系,程序?qū)]發(fā)通過編譯。
在運(yùn)行階段,被轉(zhuǎn)型變量所引用對象的實(shí)際類型必須是目標(biāo)類型的實(shí)例,或者是目標(biāo)類型的子類,實(shí)現(xiàn)類的實(shí)例,否則在運(yùn)行時(shí)將引發(fā)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轉(zhuǎn)換成String類型。
?
?
public class InstanceTest {
???? public static void main(String[]args){
??? ? ?String s = null;
??? ? ?System.out.println(s instanceof String);
???? }
}
False
S定義為null,雖然null可以作為所有引用類型變量的值,但對于s引用變量而言,它實(shí)際并未引用一個(gè)真正的String對象,因此程序輸出false。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Java Instanceof的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 指针 和 数组
- 下一篇: 用Java编写模仿的太阳系(九星行旋转)