最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年11月10日 11:48:02   作者:nextnj  
instanceof 是 Java 的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型。接下來(lái)通過(guò)本文給大家介紹java 中的instanceof用法詳解及instanceof是什么意思,需要的朋友參考下吧

好,應(yīng)大家的要求先給大家說(shuō)下在JAVA程序中instanceof是什么意思

instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)。

instanceof運(yùn)算符用法

運(yùn)算符是雙目運(yùn)算符,左面的操作元是一個(gè)對(duì)象實(shí)例,右面是一個(gè)類.當(dāng)左面的對(duì)象是右面的類創(chuàng)建的對(duì)象時(shí),該運(yùn)算符運(yùn)算的結(jié)果是true,否則是false

說(shuō)明:

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

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

    即位于繼承樹(shù)的同一個(gè)分支上,否則會(huì)編譯出錯(cuò)     

 double obj=1;
 if(obj instanceof Double){
 System.out.println("true");
 }

  報(bào) "Incompatible conditional operand types double and Double" 錯(cuò)誤

      obj 必須是對(duì)象的實(shí)例。不能是基礎(chǔ)數(shù)據(jù)類型?!?/p>

  String obj=1.0+"";
 if(obj instanceof Double){
 System.out.println("true");
 }

       報(bào) "Incompatible conditional operand types String and Double" 錯(cuò)誤

   String 和 Double 不是位于繼承樹(shù)的同一個(gè)分支上?! ?/p>

 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測(cè)試任何類型時(shí)都是返回false的。

 if(obj instanceof null){
 System.out.println("true");
 }else{
 System.out.println("false");
 }

編譯出錯(cuò)。報(bào)"Syntax error on token "null", invalid ReferenceType" 錯(cuò)誤。

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{ 
}

   看到上面的測(cè)試結(jié)果可能會(huì)有這樣那樣的疑惑,為什么Student對(duì)象測(cè)試String的時(shí)候是編譯錯(cuò)誤,而測(cè)試List的時(shí)候又能夠通過(guò)(難道是instanceof對(duì)接口在編譯時(shí)不作檢查呢,還是由于List類型本身在編譯時(shí)不確定具體類型導(dǎo)致的),但是后面你又會(huì)發(fā)現(xiàn)如果是List<String>的時(shí)候編譯就不通過(guò)了(看來(lái)前面的猜測(cè)是錯(cuò)誤的,他對(duì)接口是要做檢查的),可是往后面看,你又會(huì)納悶String測(cè)試List還是List<?>的時(shí)候,直接在編譯期就報(bào)錯(cuò)了,這跟Student對(duì)象測(cè)試List和List<?>的結(jié)果大不同,可能此時(shí)你有點(diǎn)相當(dāng)不解了。我們這個(gè)時(shí)候翻看java對(duì)instanceof操作符的說(shuō)明時(shí),發(fā)現(xiàn)instanceof的這些表現(xiàn)都是跟cast操作符是有點(diǎn)關(guān)系的,就是說(shuō)當(dāng)我們?cè)趇nstanceof方法時(shí),編譯器會(huì)檢查這個(gè)對(duì)象能夠cast到右邊的類型,如果不能cast則直接報(bào)錯(cuò),如果不能確定類型,則通過(guò)編譯,具體看運(yùn)行時(shí)定。

  這里可能還有一個(gè)疑惑,我們Student已經(jīng)確定類型了啊,List類型也是確定的啊,為什么能夠編譯通過(guò)呢,而String卻不行呢(難道是自己定義的類和系統(tǒng)定義的類在編譯處理上有不同),這里java沒(méi)有做特別的說(shuō)明,但是我想可能是因?yàn)閒inal關(guān)鍵字的區(qū)別造成的,我們發(fā)現(xiàn)不論String、Integer、Long等都是最終類,他們的處理類似于編譯器對(duì)常量的處理,因?yàn)榫幾g器知道這個(gè)類在運(yùn)行期間是不會(huì)有改變的,故而編譯器在編譯期間認(rèn)為他自己能夠確定這個(gè)類的最終類型。而對(duì)于自己定義的類呢(我試過(guò)系統(tǒng)的非最終類Hashtable、HashMap等,測(cè)試和我們自定義的類的結(jié)果一樣,可以通過(guò)編譯),由于不是最終類,可能編譯器認(rèn)為他可能在運(yùn)行期間會(huì)有改變的可能,故而不把他作最為確定的類型處理,故而可以通過(guò)編譯。其實(shí)當(dāng)我們?cè)谧远x的類前面加上final關(guān)鍵字的時(shí)候,其表現(xiàn)就跟String、Integer、Long這些最終類測(cè)試instanceof表現(xiàn)的一樣了。

好,下面通過(guò)實(shí)例代碼看下java中instanceof用法

java 中的instanceof 運(yùn)算符是用來(lái)在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過(guò)返回一個(gè)布爾值來(lái)指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。

 用法:

result = object instanceof class

參數(shù):

Result:布爾類型。
Object:必選項(xiàng)。任意對(duì)象表達(dá)式。
Class:必選項(xiàng)。任意已定義的對(duì)象類。

說(shuō)明:

如果 object 是 class 的一個(gè)實(shí)例,則 instanceof 運(yùn)算符返回 true。如果 object 不是指定類的一個(gè)實(shí)例,或者 object 是 null,則返回 false。

示例代碼如下:

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
*/

總結(jié)

以上所述是小編給大家介紹的java 中的instanceof用法詳解及instanceof是什么意思,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java將中文轉(zhuǎn)化為拼音的簡(jiǎn)單代碼示例

    Java將中文轉(zhuǎn)化為拼音的簡(jiǎn)單代碼示例

    在我們使用手機(jī)通訊錄或各種APP的搜索功能時(shí),既可以根據(jù)中文搜索,也可以根據(jù)拼音搜索,這種時(shí)候就使用到了中文轉(zhuǎn)拼音的功能了,下面這篇文章主要給大家介紹了關(guān)于Java將中文轉(zhuǎn)化為拼音的簡(jiǎn)單代碼示例,需要的朋友可以參考下
    2024-03-03
  • Java?導(dǎo)出Excel增加下拉框選項(xiàng)

    Java?導(dǎo)出Excel增加下拉框選項(xiàng)

    這篇文章主要介紹了Java?導(dǎo)出Excel增加下拉框選項(xiàng),excel對(duì)于下拉框較多選項(xiàng)的,需要使用隱藏工作簿來(lái)解決,使用函數(shù)取值來(lái)做選項(xiàng),下文具體的操作詳情,需要的小伙伴可以參考一下
    2022-04-04
  • Java值得使用Lambda的8個(gè)場(chǎng)景合集

    Java值得使用Lambda的8個(gè)場(chǎng)景合集

    可能對(duì)不少人來(lái)說(shuō),Lambda顯得陌生又復(fù)雜,覺(jué)得Lambda會(huì)導(dǎo)致代碼可讀性下降,但畢竟2023年了,JDK都出了那么多新版本,是時(shí)候試試Lambda了
    2023-08-08
  • 一文詳解SpringMVC中的@RequestMapping注解

    一文詳解SpringMVC中的@RequestMapping注解

    @RequestMapping是一個(gè)用于映射HTTP請(qǐng)求到處理方法的注解,在Spring框架中使用,它可以用于控制器類和處理方法上,用來(lái)指定處理不同URL路徑的請(qǐng)求,并定義請(qǐng)求的方法等,本文小編將給大家詳細(xì)的介紹一下SpringMVC中的@RequestMapping注解,需要的朋友可以參考下
    2023-08-08
  • Java調(diào)用py或者exe文件實(shí)現(xiàn)Word轉(zhuǎn)PDF

    Java調(diào)用py或者exe文件實(shí)現(xiàn)Word轉(zhuǎn)PDF

    這篇文章主要為大家詳細(xì)介紹了Java如何調(diào)用py或者exe文件實(shí)現(xiàn)Word轉(zhuǎn)PDF效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2025-03-03
  • 親身體驗(yàn)Intellij?Idea從卡頓到順暢全過(guò)程

    親身體驗(yàn)Intellij?Idea從卡頓到順暢全過(guò)程

    這篇文章主要介紹了親身體驗(yàn)Intellij?Idea從卡頓到順暢全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • spring security自定義決策管理器

    spring security自定義決策管理器

    這篇文章主要介紹了spring security自定義決策管理器的實(shí)現(xiàn)代碼,需要的朋友參考下吧
    2017-09-09
  • Spring?Cloud?Gateway編碼實(shí)現(xiàn)任意地址跳轉(zhuǎn)的示例

    Spring?Cloud?Gateway編碼實(shí)現(xiàn)任意地址跳轉(zhuǎn)的示例

    本文主要介紹了Spring?Cloud?Gateway編碼實(shí)現(xiàn)任意地址跳轉(zhuǎn)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java聊天室之實(shí)現(xiàn)客戶端一對(duì)一聊天功能

    Java聊天室之實(shí)現(xiàn)客戶端一對(duì)一聊天功能

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易聊天室之實(shí)現(xiàn)客戶端一對(duì)一聊天功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下
    2022-10-10
  • 詳解Java Selenium中的鍵盤控制操作

    詳解Java Selenium中的鍵盤控制操作

    這篇文章主要為大家介紹了如何使用java代碼利用Selenium 控制瀏覽器中需要用到的鍵盤操作。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-01-01

最新評(píng)論

莎车县| 平安县| 华宁县| 黑龙江省| 邵阳市| 融水| 龙泉市| 岑巩县| 沙湾县| 呼和浩特市| 揭西县| 华蓥市| 万盛区| 自贡市| 绥宁县| 鄂伦春自治旗| 红桥区| 资阳市| 丰原市| 惠安县| 涡阳县| 广元市| 襄樊市| 屏边| 永寿县| 广汉市| 盖州市| 定日县| 宿州市| 敦煌市| 沂南县| 永顺县| 运城市| 通州市| 治县。| 兴安县| 五指山市| 崇左市| 大理市| 育儿| 桃园县|