Java 中的語法糖

百度百科對語法糖的定義

  語法糖(Syntactic sugar),也譯爲糖衣語法,是由英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能並無影響,可是更方便程序員使用。一般來講使用語法糖可以增長程序的可讀性,從而減小程序代碼出錯的機會。程序員

  Java中的語法糖也是新增了一些語法,使得程序員使用更加方便。可是計算機底層仍是使用基本語法來實現的。下面咱們討論幾個常常使用到的語法糖,可變參數自動裝箱/拆箱加強for循環編程

可變參數

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

源代碼:spa

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

將該文件的字節碼反編譯獲得的代碼:code

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種基本數據類型,它們不是對象。因此沒有對應的方法,沒法區分‘0’和‘NULL’,操做起來不方便,因此Java將它們封裝成對象Byte、Short、Integer、Long、 Character、Float、Double、Boolean,並給出相應的方法。咱們把一個基本數據類型賦給封裝類對象,須要進行類型轉換,而把一個封裝類對象賦給一個基本數據類型須要解析。咱們把這兩個過程分別稱爲,裝箱和拆箱。對象

  因爲這兩個操做常常要使用,裝/拆操做繁瑣而沒有難度,因此Java就給出了自動裝/拆箱操做,咱們用Integer討論,其它的7種同樣。blog

源代碼:for循環

public class Test {

    public static void main(String[] args) {
        Integer num1 = 123;//將一個基本數據類型賦給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實例名){}class

咱們用加強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中的語法糖還有不少條件編譯、內部類、枚舉類、泛型等等。

相關文章
相關標籤/搜索