亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

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

測試類設(shè)計

測試類一

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方法");
 }
}

測試類二

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方法");
 }
}

測試類三

public class Text {

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

結(jié)果

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

測試類一

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

測試類二

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

測試類三

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

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

原因分析

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

測試類一

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

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

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

測試類二

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

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

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

測試類三

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)用實例方法的命令,所以結(jié)果中自動"向上轉(zhuǎn)型"其實是jvm的功勞。jvm通過在編譯時確定調(diào)用的傳參類型,靜態(tài)分派到具體方法的。

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

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

相關(guān)文章

  • 詳解JVM基礎(chǔ)之字節(jié)碼的增強技術(shù)

    詳解JVM基礎(chǔ)之字節(jié)碼的增強技術(shù)

    字節(jié)碼增強技術(shù)就是一類對現(xiàn)有字節(jié)碼進行修改或者動態(tài)生成全新字節(jié)碼文件的技術(shù)。接下來,我們將從最直接操縱字節(jié)碼的實現(xiàn)方式開始深入進行剖析,感興趣的可以了解一下
    2022-10-10
  • Spring的@Scope注解詳細(xì)解析

    Spring的@Scope注解詳細(xì)解析

    這篇文章主要介紹了Spring的@Scope注解詳細(xì)解析,@Scope注解主要作用是調(diào)節(jié)Ioc容器中的作用域,springboot?程序啟動時會對classpath路徑下的包中的類進行掃描,將類解析成BeanDefinition,需要的朋友可以參考下
    2023-11-11
  • 帶你了解Java常用類小結(jié)

    帶你了解Java常用類小結(jié)

    今天帶大家學(xué)習(xí)Java常用工具類,文中有非常詳細(xì)的圖文解說及代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用實例

    Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用實例

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程之簡單的服務(wù)端客戶端應(yīng)用,以實例形式較為詳細(xì)的分析了java網(wǎng)絡(luò)編程的原理與服務(wù)器端客戶端的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 使用eclipse + maven一步步搭建SSM框架教程詳解

    使用eclipse + maven一步步搭建SSM框架教程詳解

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三個開源框架整合而成,常作為數(shù)據(jù)源較簡單的web項目的框架.這篇文章主要介紹了eclipse + maven搭建SSM框架 ,需要的朋友可以參考下
    2017-11-11
  • Java實現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件

    Java實現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件

    這篇文章主要介紹了Java如何實現(xiàn)在Word中嵌入多媒體(視頻、音頻)文件,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)java有一定的幫助,感興趣的同學(xué)可以了解一下
    2021-12-12
  • SpringBoot MainApplication類文件的位置詳解

    SpringBoot MainApplication類文件的位置詳解

    這篇文章主要介紹了SpringBoot MainApplication類文件的位置詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • IDEA安裝后找不到.vmoptions文件的問題及解決

    IDEA安裝后找不到.vmoptions文件的問題及解決

    這篇文章主要介紹了IDEA安裝后找不到.vmoptions文件的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決

    Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決

    這篇文章主要為大家介紹了Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 詳解Java中的四種引用類型(強軟弱虛)

    詳解Java中的四種引用類型(強軟弱虛)

    Java中的引用類型主要分為四種,分別是強引用、軟引用、弱引用和虛引用,這篇文章主要為大家詳細(xì)介紹了四者的使用與區(qū)別,需要的小伙伴可以參考下
    2023-10-10

最新評論