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

JAVA的LIST接口的REMOVE重載方法調(diào)用原理解析

 更新時(shí)間:2019年10月10日 08:28:33   作者:cartoony  
這篇文章主要介紹了JAVA的LIST接口的REMOVE重載方法調(diào)用原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

說真的,平常看源碼都是自己看完自己懂,很少有寫出來的沖動(dòng)。

但是在寫算法的時(shí)候,經(jīng)常用到j(luò)ava中各種集合,其中也比較常用到remove方法。

remove有重載函數(shù),分別傳入?yún)?shù)是索引index或者數(shù)據(jù)Object(指定泛型后自動(dòng)轉(zhuǎn)換),如果指定泛型是其他數(shù)據(jù)類型還好,但是指定的是Integer或者是int的話,或者就有點(diǎn)懵了。

這曾經(jīng)也困惑過我,所以我就唯有用實(shí)踐解惑了。

測(cè)試類設(shè)計(jì)

測(cè)試類一

public class Text {

 public void remove(int index){
  System.out.println("調(diào)用傳參為int的remove方法");
 }

 public void remove(Integer object){
  System.out.println("調(diào)用傳參為Integer的remove方法");
 }

 public void remove(Object object){
  System.out.println("調(diào)用傳參為Object的remove方法");
 }
}

測(cè)試類二

public class Text {
 
 public void remove(Integer object){
  System.out.println("調(diào)用傳參為Integer的remove方法");
 }

 public void remove(Object object){
  System.out.println("調(diào)用傳參為Object的remove方法");
 }
}

測(cè)試類三

public class Text {

 public void remove(Object object){
  System.out.println("調(diào)用傳參為Object的remove方法");
 }
}

結(jié)果

三個(gè)測(cè)試類分別傳入int,Integer,Object型變量,觀察效果。

測(cè)試類一

  • 傳入類型為int:調(diào)用傳參為int的remove方法
  • 傳入類型為Integer:調(diào)用傳參為Integer的remove方法
  • 傳入類型為Object:調(diào)用傳參為Object的remove方法

測(cè)試類二

  • 傳入類型為int:調(diào)用傳參為Integer的remove方法
  • 傳入類型為Integer:調(diào)用傳參為Integer的remove方法
  • 傳入類型為Object:調(diào)用傳參為Object的remove方法

測(cè)試類三

  • 傳入類型為int:調(diào)用傳參為Object的remove方法
  • 傳入類型為Integer:調(diào)用傳參為Object的remove方法
  • 傳入類型為Object:調(diào)用傳參為Object的remove方法

從輸出結(jié)果可以看出,當(dāng)方法的傳參的類層級(jí)逐漸變高時(shí),層級(jí)較低的傳參會(huì)進(jìn)行向上轉(zhuǎn)型適應(yīng)傳參的需要。

原因分析

下面我們先反編譯各測(cè)試類的源碼,結(jié)果如下

測(cè)試類一

invokevirtual #11 // Method remove:(I)V

invokevirtual #15 // Method remove:(Ljava/lang/Integer;)V

invokevirtual #18 // Method remove:(Ljava/lang/Object;)V

測(cè)試類二

invokevirtual #11 // Method remove:(Ljava/lang/Integer;)V

invokevirtual #11 // Method remove:(Ljava/lang/Integer;)V

invokevirtual #17 // Method remove:(Ljava/lang/Object;)V

測(cè)試類三

invokevirtual #10 // Method remove:(Ljava/lang/Object;)V

invokevirtual #10 // Method remove:(Ljava/lang/Object;)V

invokevirtual #10 // Method remove:(Ljava/lang/Object;)V

可以看出,反編譯代碼中都是調(diào)用實(shí)例方法的命令,所以結(jié)果中自動(dòng)"向上轉(zhuǎn)型"其實(shí)是jvm的功勞。jvm通過在編譯時(shí)確定調(diào)用的傳參類型,靜態(tài)分派到具體方法的。

所以在前言中的困惑已經(jīng)解除了,就是由于jvm中靜態(tài)分派的實(shí)現(xiàn),調(diào)用次序是int->Integer->Object。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java通過導(dǎo)出超大Excel文件解決內(nèi)存溢出問題

    Java通過導(dǎo)出超大Excel文件解決內(nèi)存溢出問題

    導(dǎo)出excel是咱Java開發(fā)的必備技能,下面這篇文章主要給大家介紹了關(guān)于Java通過導(dǎo)出超大Excel文件解決內(nèi)存溢出問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • springboot內(nèi)置tomcat之NIO處理流程一覽

    springboot內(nèi)置tomcat之NIO處理流程一覽

    這篇文章主要介紹了springboot內(nèi)置tomcat之NIO處理流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳細(xì)盤點(diǎn)Java中鎖的分類

    詳細(xì)盤點(diǎn)Java中鎖的分類

    這篇文章主要介紹了詳細(xì)盤點(diǎn)Java中鎖的分類,Java中的鎖是一種多線程編程中的同步機(jī)制,用于控制線程對(duì)共享資源的訪問,防止并發(fā)訪問時(shí)的數(shù)據(jù)競(jìng)爭(zhēng)和死鎖問題,需要的朋友可以參考下
    2023-08-08
  • 前后端項(xiàng)目分離解決cors錯(cuò)誤的方法詳解

    前后端項(xiàng)目分離解決cors錯(cuò)誤的方法詳解

    隨著前后端分離技術(shù)的越來越盛行,跨域問題也逐漸凸顯了出來,下面這篇文章主要給大家介紹了關(guān)于前后端項(xiàng)目分離解決cors錯(cuò)誤的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Spring Cloud @RefreshScope 原理及使用

    Spring Cloud @RefreshScope 原理及使用

    這篇文章主要介紹了Spring Cloud @RefreshScope 原理及使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 如何構(gòu)建可重復(fù)讀取inputStream的request

    如何構(gòu)建可重復(fù)讀取inputStream的request

    這篇文章主要介紹了如何構(gòu)建可重復(fù)讀取inputStream的request,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Intellij IDEA如何去掉@Autowired 注入警告的方法

    Intellij IDEA如何去掉@Autowired 注入警告的方法

    這篇文章主要介紹了Intellij IDEA如何去掉@Autowired 注入警告的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • JAVA代碼調(diào)用ffmpeg程序進(jìn)行視頻轉(zhuǎn)碼和推流方式

    JAVA代碼調(diào)用ffmpeg程序進(jìn)行視頻轉(zhuǎn)碼和推流方式

    本文介紹了如何通過Java代碼調(diào)用FFmpeg進(jìn)行多媒體視頻處理,包括兩種方式:使用第三方封裝的jar包和使用ProcessBuilder類創(chuàng)建進(jìn)程,兩種方式各有優(yōu)缺點(diǎn),選擇時(shí)需根據(jù)具體需求和場(chǎng)景
    2025-02-02
  • Springboot打印接口的三種方式分享

    Springboot打印接口的三種方式分享

    這篇文章主要為大家詳細(xì)介紹了Springboot打印接口的三種方式:aop切面的方式、過濾器的方式和攔截器的方式,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • 詳解Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹

    詳解Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹

    平衡二叉樹(Balanced?Binary?Tree)又被稱為AVL樹(有別于AVL算法),且具有以下性質(zhì):它是一?棵空樹或它的左右兩個(gè)子樹的高度差的絕對(duì)值不超過1,并且左右兩個(gè)子樹都是一棵平衡二叉樹。本文將詳解介紹一下平衡二叉樹的原理與實(shí)現(xiàn),需要的可以參考一下
    2022-02-02

最新評(píng)論

新沂市| 郴州市| 镇远县| 铜梁县| 综艺| 铜山县| 太康县| 仙桃市| 常宁市| 陆川县| 邵东县| 洛宁县| 涟水县| 怀安县| 高陵县| 宜兰县| 遵化市| 成都市| 星子县| 渑池县| 枣强县| 平凉市| 黑龙江省| 南康市| 鹿泉市| 青铜峡市| 应用必备| 炎陵县| 河北区| 新乡县| 库车县| 祁门县| 汾西县| 罗江县| 武川县| 太康县| 贵州省| 锡林郭勒盟| 繁昌县| 乃东县| 金华市|