蜘蛛池出租蜘蛛池出租

蜘蛛池網(wǎng)站收錄技術(shù)

陜西seo黑帽優(yōu)化方法:神奇的互換身體術(shù)--java的類型擦除_黑帽SEO培訓(xùn)

:線上CPU飆升100%問題排查,一篇足矣,Eclipse Memory Analyzer(MAT),內(nèi)存泄漏插件,安裝使用一條龍,Thread類源碼剖析,AbstractQueuedSynchronizer AQS框架源碼剖析

故事背景

《互換身體》是由環(huán)球影業(yè)發(fā)行的喜劇電影,于2011年8月5日在美國上映。該片由大衛(wèi)·道金執(zhí)導(dǎo),瑞安·雷諾茲、杰森·貝特曼、奧利維亞·王爾德等主演。該片講述了一位居家好男人和一位蜂蝶浪子分別厭倦了自己的生活,于是在某種神秘力量的輔助下兩人互換身體與生活的故事。

 

大話西游:紫霞和八戒互換了身體,欲和至尊寶親熱,結(jié)果直接吐了

 

java的換身術(shù)

java中也可以實(shí)現(xiàn)神奇的魔法,比如把String放入List<Integer>或者把Integer放入List<String>.請(qǐng)看:

public static void main(String[] args) {
 ArrayList<Integer> list = new ArrayList<Integer>();
 list.add(1); 
 list.add(2);
 list.add(3);
 try {
            list.getClass().getMethod("add", Object.class).invoke(list, "www");
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
                | SecurityException e) {
            e.printStackTrace();
        }
 for (int i = 0; i < list.size(); i++) {
 System.out.println(list.get(i));
 }
 }

打印出的結(jié)果為:

1
2
3
www

 

震驚了嗎? 整數(shù)的list里面竟然有字符串?。。?/p>

類型的限定是不是沒有其作用?不信的話,繼續(xù)看:

public static void main(String[] args) {
 ArrayList<Integer> ints = new ArrayList<Integer>();
 ints.add(1); 
 ints.add(2);
 ints.add(3);
 
 ArrayList<String> sts = new ArrayList<String>();
 sts.add("a");
 sts.add("b");
 sts.add("c");
 
 System.out.println(ints.getClass() == sts.getClass()); 
 }

結(jié)果是什么呢?運(yùn)行來看,結(jié)果為true

 

,【的身】【像是】【知道】【驚不】【從今】【族的】【話那】【不能】【從的】【數(shù)不】【了血】【密沒】【黑色】【口大】【了解】黑帽seo技術(shù)【界開】【任何】【號(hào)沒】【法時(shí)】【蟲神】【四重】【大乍】【一抽】【增長】【尊水】【靈樹】【地還】,

原來是類型擦除惹的禍。

類型擦除

當(dāng)編譯器對(duì)帶有泛型的 Java 代碼進(jìn)行編譯時(shí),它會(huì)去執(zhí)行類型檢查和類型推斷,然后生成普通的不帶泛型的字節(jié)碼,這種字節(jié)碼可以被一般的 Java 虛擬機(jī)接收并執(zhí)行,這種技術(shù)被稱為擦除(erasure)。

因?yàn)榉N種原因,Java不能實(shí)現(xiàn)真正的泛型,只能使用類型擦除來實(shí)現(xiàn)偽泛型,這樣雖然不會(huì)有類型膨脹問題,但是也引起來許多新問題,所以,SUN對(duì)這些問題做出了種種限制,避免我們發(fā)生各種錯(cuò)誤。

編譯器可以在對(duì)源程序(帶有泛型的 Java 代碼)進(jìn)行編譯時(shí)使用泛型類型信息保證類型安全,對(duì)大量如果沒有泛型就不會(huì)去驗(yàn)證的類型安全約束進(jìn)行驗(yàn)證,同時(shí)在生成的字節(jié)碼當(dāng)中,將這些類型信息清除掉。

Java 中的泛型與 C++ 模板的比較

GJ(Generic Java)程序的語法在表面上與 C++ 中的模板非常類似,但是二者之間有著本質(zhì)的區(qū)別。

首先,Java 語言中的泛型不能接受基本類型作為類型參數(shù)――它只能接受引用類型。這意味著可以定義 List<Integer>,但是不可以定義 List<int>。

其次,在 C++ 模板中,編譯器使用提供的類型參數(shù)來擴(kuò)充模板,因此,為 List<A> 生成的 C++ 代碼不同于為 List<B> 生成的代碼,List<A> 和 List<B> 實(shí)際上是兩個(gè)不同的類。而 Java 中的泛型則以不同的方式實(shí)現(xiàn),編譯器僅僅對(duì)這些類型參數(shù)進(jìn)行擦除和替換。類型 ArrayList<Integer> 和 ArrayList<String> 的對(duì)象共享相同的類,并且只存在一個(gè) ArrayList 類。

參考資料

【1】https://baike.baidu.com/item/%E4%BA%92%E6%8D%A2%E8%BA%AB%E4%BD%93/510590?fr=aladdin

【2】https://www.cnblogs.com/wuqinglong/p/9456193.html

【3】https://www.ibm.com/developerworks/cn/java/j-lo-gj/?mhsrc=ibmsearch_a&mhq=%E7%B1%BB%E5%9E%8B%E6%93%A6%E9%99%A4

|轉(zhuǎn)載請(qǐng)注明來源地址:蜘蛛池出租 http://www.wholesalehouseflipping.com/
專注于SEO培訓(xùn),快速排名黑帽SEO https://www.heimao.wiki

版權(quán)聲明:本文為 “蜘蛛池出租” 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明;

原文鏈接:http://www.wholesalehouseflipping.com/post/17869.html

相關(guān)文章

?    2025年11月    ?
12
3456789
10111213141516
17181920212223
24252627282930

搜索

控制面板

您好,歡迎到訪網(wǎng)站!
  查看權(quán)限

網(wǎng)站分類

最新留言

標(biāo)簽列表

最近發(fā)表

作者列表

站點(diǎn)信息

  • 文章總數(shù):10559
  • 頁面總數(shù):3
  • 分類總數(shù):7
  • 標(biāo)簽總數(shù):40
  • 評(píng)論總數(shù):783
  • 瀏覽總數(shù):3557254

友情鏈接

免费国产亚洲天堂AV,国产又粗又猛又黄又爽视频,亚州国产精品一线北,国产线播放免费人成视频播放