Java 中的文法糖

來源:互聯網
上載者:User

標籤:string   簡化   類對象   iter   yourself   等等   數組傳參   nta   ati   

百度百科對文法糖的定義

  文法糖(Syntactic sugar),也譯為糖衣文法,是由英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指電腦語言中添加的某種文法,這種文法對語言的功能並沒有影響,但是更方便程式員使用。通常來說使用文法糖能夠增加程式的可讀性,從而減少程式碼出錯的機會。

  Java中的文法糖也是新增了一些文法,使得程式員使用更加方便。但是電腦底層還是使用基本文法來實現的。下面我們討論幾個經常使用到的文法糖,可變參數自動裝箱/拆箱增強for迴圈

可變參數

  沒有可變參數時,我們使用同樣功能的方法需要對該方法進行重載。將會有大量的重複代碼,違反DRY(Don‘t repeat yourself)原則。但是有了可變參數我們可以傳入不同個數的參數,調用同一個方法。

原始碼:

public class VarialbeArgumentsDemo {    public static void doWork(int... a) {//可變參數        System.out.println("同一個功能!");    }    public static void main(String[] args) {        doWork(1);        doWork(1,2,3);//不同個數的參數,調用的同一個方法    }}
輸出結果:
    同一個功能!
    同一個功能!

將該檔案的位元組碼反編譯得到的代碼:

public class VarialbeArgumentsDemo{  public static void doWork(int... a) {    System.out.println("????????????");  }    public static void main(String[] args){    doWork(  new int[] { 1 });    doWork(new int[] { 1, 2, 3 });//電腦底層用數組來實現,可變參數的傳遞  }}
我們發現可變參數的實質就是數組傳參。 自動裝箱\拆箱

  Java中有8種基礎資料型別 (Elementary Data Type),它們不是對象。所以沒有對應的方法,無法區分‘0’和‘NULL’,操作起來不方便,所以Java將它們封裝成對象Byte、Short、Integer、Long、 Character、Float、Double、Boolean,並給出相應的方法。我們把一個基礎資料型別 (Elementary Data Type)賦給封裝類對象,需要進行類型轉換,而把一個封裝類對象賦給一個基礎資料型別 (Elementary Data Type)需要解析。我們把這兩個過程分別稱為,裝箱和拆箱。

  由於這兩個操作經常要使用,裝/拆操作繁瑣而沒有難度,所以Java就給出了自動裝/拆箱操作,我們用Integer討論,其它的7種一樣。

原始碼:

public class Test {    public static void main(String[] args) {        Integer num1 = 123;//將一個基礎資料型別 (Elementary Data Type)賦給Integer對象        int num2 = num1;//將一個Integer對象賦給整形變數    }}

將該檔案的位元組碼反編譯得到的代碼:

public class Test{  public static void main(String[] args) {    Integer num1 = Integer.valueOf(123);//裝箱操作    int num2 = num1.intValue();//拆箱操作  }}
電腦底層依然是手動裝箱拆箱。增強for迴圈

  增強for迴圈(foreach),讓我們對數組和Iterator執行個體便利更加方便。文法格式:for(資料類型 類型名 : 數組名/Iterator執行個體名){}

我們用增強for迴圈對整型數組進行遍曆。

原始碼:

public class Test {    public static void main(String[] args) {        int[] arr = new int[]{1,2,3,4,5};        for (int ele : arr) {//對arr進行遍曆輸出            System.out.print(ele);        }    }}

 將該檔案的位元組碼反編譯得到的代碼:

public class Test{  public static void main(String[] args) {    int[] arr = { 1, 2, 3, 4, 5 };    int[] arrayOfInt1;    int j = (arrayOfInt1 = arr).length;//將原來的數組拷貝一份,防止破壞原有資料    for (int i = 0; i < j; i++) {      int ele = arrayOfInt1[i];      System.out.print(ele);    }  }}
增強for迴圈在底層依舊使用的for迴圈

============================================

文法糖就是為了讓某些固定格式的操作簡化,程式員更方便,從而實現高效編程。

Java中的文法糖還有很多條件編譯、內部類、枚舉類、泛型等等。

 

Java 中的文法糖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.