Java 中的語法糖 (Syntactic Sugar)
阿新 • • 發佈:2018-12-23
語法糖(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));