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

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

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

前言

說(shuō)真的,平??丛创a都是自己看完自己懂,很少有寫(xiě)出來(lái)的沖動(dòng)。

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

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

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

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

測(cè)試類(lèi)一

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è)試類(lèi)二

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è)試類(lèi)三

public class Text {

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

結(jié)果

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

測(cè)試類(lèi)一

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

測(cè)試類(lèi)二

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

測(cè)試類(lèi)三

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

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

原因分析

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

測(cè)試類(lèi)一

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

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

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

測(cè)試類(lèi)二

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è)試類(lèi)三

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通過(guò)在編譯時(shí)確定調(diào)用的傳參類(lèi)型,靜態(tài)分派到具體方法的。

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    SpringBoot MainApplication類(lèi)文件的位置詳解

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

    IDEA安裝后找不到.vmoptions文件的問(wèn)題及解決

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

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

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

    詳解Java中的四種引用類(lèi)型(強(qiáng)軟弱虛)

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

最新評(píng)論