語法糖(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循環(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); } } }
============================================
語法糖就是爲了讓某些固定格式的操做簡化,程序員更方便,從而實現高效編程。
Java中的語法糖還有不少條件編譯、內部類、枚舉類、泛型等等。