【深入Java虛擬機器】之六:Java文法糖

來源:互聯網
上載者:User


虛擬機器並不支援這些文法,

Map<int,String> map = new HashMap<int,String>();map.put(1,"No.1");map.put(2,"No.2");System.out.println(map.get(1));System.out.println(map.get(2));

Map map = new HashMap();map.put(1,"No.1");map.put(2,"No.2");System.out.println((String)map.get(1));System.out.println((String)map.get(2));

import java.util.List;public class FanxingTest{public void method(List<String> list){System.out.println("List String");}public void method(List<Integer> list){System.out.println("List Int");}}

    當我用

    這是因為泛型

    把以上代碼修改如下:

import java.util.List;public class FanxingTest{public int method(List<String> list){System.out.println("List String");return 1;}public boolean method(List<Integer> list){System.out.println("List Int");return true;}}

    發現這時編譯可以通過了(語言中和沒有關聯,二者屬於不同的類型,不能相互轉換,不存在語言中整數值非零即真的情況)。兩個不同類型的返回值的加入,使得方法的重載成功了。這是為什麼呢?

    我們知道,因此方法的返回值並不參與重載方法的選擇,這樣看來為重載方法加入返回值貌似是多餘的。對於重載方法的選擇來說,這確實是多餘的,但我們現在要解決的問題是讓上述代碼能通過編譯,讓兩個重載方法能夠合理地共存於同一個為兩個重載方法加入不同的返回值後,因為有了不同的位元組碼特徵簽名,它們便可以共存於一個

    自動拆裝箱、變長參數等文法糖也都是在編譯階段就把它們該文法糖結構還原為了原生的文法結構,因此在檔案中也只存在其對應的原生類型,這裡不再一一說明。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.