一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - java 中的instanceof用法詳解及instanceof是什么意思(推薦)

java 中的instanceof用法詳解及instanceof是什么意思(推薦)

2021-02-02 11:59nextnj JAVA教程

instanceof 是 Java 的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回 boolean 的數據類型。接下來通過本文給大家介紹java 中的instanceof用法詳解及instanceof是什么意思,需要的朋友參考下吧

好,應大家的要求先給大家說下在JAVA程序中instanceof是什么意思

instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數據。

instanceof運算符用法

運算符是雙目運算符,左面的操作元是一個對象實例,右面是一個類.當左面的對象是右面的類創建的對象時,該運算符運算的結果是true,否則是false

說明:

  (1).一個類的實例包括本身的實例,以及所有直接或間接子類的實例

  (2).instanceof左邊操作元顯式聲明的類型與右邊操作元必須是同種類或有繼承關系,

    即位于繼承樹的同一個分支上,否則會編譯出錯     

java" id="highlighter_739197">
?
1
2
3
4
double obj=1;
if(obj instanceof Double){
System.out.println("true");
}

  報 "Incompatible conditional operand types double and Double" 錯誤

      obj 必須是對象的實例。不能是基礎數據類型。 

?
1
2
3
4
String obj=1.0+"";
if(obj instanceof Double){
System.out.println("true");
}

       報 "Incompatible conditional operand types String and Double" 錯誤

   String 和 Double 不是位于繼承樹的同一個分支上。  

?
1
2
3
4
5
6
7
8
9
10
11
if(null instanceof Object){
System.out.println("true");
}else{
System.out.println("false");
}
String obj=null;
if(obj instanceof Object){
System.out.println("true");
}else{
System.out.println("false");
}

      打印都為 false.  null用操作符instanceof測試任何類型時都是返回false的。

?
1
2
3
4
5
if(obj instanceof null){
System.out.println("true");
}else{
System.out.println("false");
}

編譯出錯。報"Syntax error on token "null", invalid ReferenceType" 錯誤。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test {
 public static void main(String[] args){
 System.out.println(new Student() instanceof String); //compile time error
 System.out.println(new Student() instanceof Exception); //compile time error
 System.out.println(new Student() instanceof Object); //compilation and output true
 System.out.println(new Student() instanceof List); //compilation and output false
 System.out.println(new Student() instanceof List<?>); //compilation and output false
 System.out.println(new Student() instanceof List<String>); //compile time error
 System.out.println(new Student() instanceof List<Object>); //compile time error
 System.out.println(new String() instanceof List); //compile time error
 System.out.println(new String() instanceof List<?>); //compile time error
 System.out.println(null instanceof Object); //compilation and output false
 
 }
}
class Student{
}

   看到上面的測試結果可能會有這樣那樣的疑惑,為什么Student對象測試String的時候是編譯錯誤,而測試List的時候又能夠通過(難道是instanceof對接口在編譯時不作檢查呢,還是由于List類型本身在編譯時不確定具體類型導致的),但是后面你又會發現如果是List<String>的時候編譯就不通過了(看來前面的猜測是錯誤的,他對接口是要做檢查的),可是往后面看,你又會納悶String測試List還是List<?>的時候,直接在編譯期就報錯了,這跟Student對象測試List和List<?>的結果大不同,可能此時你有點相當不解了。我們這個時候翻看java對instanceof操作符的說明時,發現instanceof的這些表現都是跟cast操作符是有點關系的,就是說當我們在instanceof方法時,編譯器會檢查這個對象能夠cast到右邊的類型,如果不能cast則直接報錯,如果不能確定類型,則通過編譯,具體看運行時定。

  這里可能還有一個疑惑,我們Student已經確定類型了啊,List類型也是確定的啊,為什么能夠編譯通過呢,而String卻不行呢(難道是自己定義的類和系統定義的類在編譯處理上有不同),這里java沒有做特別的說明,但是我想可能是因為final關鍵字的區別造成的,我們發現不論String、Integer、Long等都是最終類,他們的處理類似于編譯器對常量的處理,因為編譯器知道這個類在運行期間是不會有改變的,故而編譯器在編譯期間認為他自己能夠確定這個類的最終類型。而對于自己定義的類呢(我試過系統的非最終類Hashtable、HashMap等,測試和我們自定義的類的結果一樣,可以通過編譯),由于不是最終類,可能編譯器認為他可能在運行期間會有改變的可能,故而不把他作最為確定的類型處理,故而可以通過編譯。其實當我們在自定義的類前面加上final關鍵字的時候,其表現就跟String、Integer、Long這些最終類測試instanceof表現的一樣了。

好,下面通過實例代碼看下java中instanceof用法

java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。

 用法:

result = object instanceof class

參數:

Result:布爾類型。
Object:必選項。任意對象表達式。
Class:必選項。任意已定義的對象類。

說明:

如果 object 是 class 的一個實例,則 instanceof 運算符返回 true。如果 object 不是指定類的一個實例,或者 object 是 null,則返回 false。

示例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.instanceoftest;
 interface A{}
 class B implements A{
 }
 class C extends B {
 }
 class instanceoftest {
 public static void main(String[] args){
 A a=null;
 B b=null;
 boolean res;
 System.out.println("instanceoftest test case 1: ------------------");
 res = a instanceof A;
 System.out.println("a instanceof A: " + res);
 res = b instanceof B;
 System.out.println("b instanceof B: " + res);
 System.out.println("/ninstanceoftest test case 2: ------------------");
 a=new B();
 b=new B();
 res = a instanceof A;
 System.out.println("a instanceof A: " + res);
 res = a instanceof B;
 System.out.println("a instanceof B: " + res);
 res = b instanceof A;
 System.out.println("b instanceof A: " + res);
 res = b instanceof B;
 System.out.println("b instanceof B: " + res);
 System.out.println("/ninstanceoftest test case 3: ------------------");
 B b2=(C)new C();
 res = b2 instanceof A;
 System.out.println("b2 instanceof A: " + res);
 res = b2 instanceof B;
 System.out.println("b2 instanceof B: " + res);
 res = b2 instanceof C;
 System.out.println("b2 instanceof C: " + res);
 }
}
/*
result:
instanceoftest test case 1: ------------------
a instanceof A: false
b instanceof B: false
instanceoftest test case 2: ------------------
a instanceof A: true
a instanceof B: true
b instanceof A: true
b instanceof B: true
instanceoftest test case 3: ------------------
b2 instanceof A: true
b2 instanceof B: true
b2 instanceof C: true
*/

總結

以上所述是小編給大家介紹的java 中的instanceof用法詳解及instanceof是什么意思,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://www.cnblogs.com/nextnj/archive/2013/05/30/3107984.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 丝袜老师好湿好紧我要进去了 | 国产成人精品777 | 欧美久在线观看在线观看 | 成人影院在线观看免费 | 精品在线免费观看视频 | 午夜伦理电影在线观免费 | 欧美性野久久久久久久久 | 欧美日韩不卡视频 | 男女拍拍拍免费视频网站 | 亚洲zooz人禽交xxxx | 色戒完整版2小时38分钟 | 日本不卡不码高清免费观看 | 亚洲色欲色欲综合网站 | 精品亚洲综合在线第一区 | 天码毛片一区二区三区入口 | 久青草国产在视频在线观看 | 精品高潮呻吟99AV无码视频 | 欧美在线视频免费播放 | 黑人与欧洲女子性大战 | 成成人看片在线 | 香蕉eeww99国产精选播放 | 任我淫 | 超级碰碰免费视频 | 天天夜夜啦啦啦 | 色呦呦tv| 成人观看免费大片在线观看 | 亚洲久草视频 | 99国产热| 欧美日韩国产精品自在自线 | 翁息肉小说老扒 | 日韩久久精品 | 百合文高h | 热久久天天拍天天拍热久久2018 | 教室里老师好紧h | 亚洲国产果果在线播放在线 | 国产乱子伦真实china | 九九热在线视频观看这里只有精品 | 精品亚洲午夜久久久久 | 九九99热久久精品在线6 | 亚洲成a人片777777久久 | 日韩在线视频二区 |