欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA的LIST接口的REMOVE重載方法調用原理解析

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

前言

說真的,平??丛创a都是自己看完自己懂,很少有寫出來的沖動。

但是在寫算法的時候,經常用到java中各種集合,其中也比較常用到remove方法。

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

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

測試類設計

測試類一

public class Text {

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

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

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

測試類二

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

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

測試類三

public class Text {

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

結果

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

測試類一

  • 傳入類型為int:調用傳參為int的remove方法
  • 傳入類型為Integer:調用傳參為Integer的remove方法
  • 傳入類型為Object:調用傳參為Object的remove方法

測試類二

  • 傳入類型為int:調用傳參為Integer的remove方法
  • 傳入類型為Integer:調用傳參為Integer的remove方法
  • 傳入類型為Object:調用傳參為Object的remove方法

測試類三

  • 傳入類型為int:調用傳參為Object的remove方法
  • 傳入類型為Integer:調用傳參為Object的remove方法
  • 傳入類型為Object:調用傳參為Object的remove方法

從輸出結果可以看出,當方法的傳參的類層級逐漸變高時,層級較低的傳參會進行向上轉型適應傳參的需要。

原因分析

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

測試類一

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

    Spring的@Scope注解詳細解析

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

    帶你了解Java常用類小結

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

    Java網絡編程之簡單的服務端客戶端應用實例

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

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

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

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

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

    SpringBoot MainApplication類文件的位置詳解

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

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

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

    Spring?Boot將@RestController誤用于視圖跳轉問題解決

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

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

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

最新評論