1. 程式人生 > >Java 中的語法糖 (Syntactic Sugar)

Java 中的語法糖 (Syntactic Sugar)

        語法糖(Syntactic Sugar),也叫糖衣語法,是英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語。指的是,在計算機語言中新增某種語法,這種語法能使程式設計師更方便的使用語言開發程式,同時增強程式程式碼的可讀性,避免出錯的機會;但是這種語法對語言的功能並沒有影響。
Java中的泛型,變長引數,自動拆箱/裝箱,條件編譯等都是,下面做簡單的介紹和分析。


泛型
        與C#中的泛型相比,Java的泛型可以算是“偽泛型”了。在C#中,不論是在程式原始碼中、在編譯後的中間語言,還是在執行期泛型都是真實存在的。Java則不同,Java的泛型只在原始碼存在,只供編輯器檢查使用,編譯後的位元組碼檔案已擦除了泛型型別,同時在必要的地方插入了強制轉型的程式碼。
泛型程式碼:

public static void main(String[] args) {
    List<String> stringList = new ArrayList<String>();
    stringList.add("oliver");
    System.out.println(stringList.get(0));
}
        將上面的程式碼的位元組碼反編譯後:
public static void main(String args[])
{
    List stringList = new ArrayList();
    stringList.add("oliver");
    System.out.println((String)stringList.get(0));
}
自動拆箱/裝箱
        自動拆箱/裝箱是在編譯期,依據程式碼的語法,決定是否進行拆箱和裝箱動作。
        裝箱過程:把基本型別用它們對應的包裝型別進行包裝,使基本型別具有物件特徵。
        拆箱過程:與裝箱過程相反,把包裝型別轉換成基本型別。
        需要注意的是:包裝型別的“==”運算在沒有遇到算數運算子的情況下不會自動拆箱,而其包裝型別的equals()方法不會處理資料型別轉換,所以:
Integer a = 1;
Integer b = 1;
Long c = 1L;
System.out.println(a == b);
System.out.println(c.equals(a));
    這樣的程式碼應該儘量避免自動拆箱與裝箱。