Java中有哪些语法糖?


不要你写汇编,Java句句是糖

不能同意上面的这句话,要说为什么,首先要定义下面要讲的“语法糖”。

语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
语法糖_百度百科

从上面可以看出,就Java语言而言,语法糖并没有给class级别的代码新增其他特性,而是借助编译器,实现了基于编译器的新语法。这种新语法方便易用,可读性好易维护,所以称之为“糖”。下面谈到的都是基于编译器的语法糖。

1. 自动装箱与拆箱(Autoboxing and unboxing)(JDK 1.5)

代码

Integer amount = 100; 

编译后,就自动装箱为

Integer amount = Integer.valueOf(100); 

同样的,自动拆箱

Integer amount = ...;
int x = amount; // 实际为: int x = amount.intValue(); 

可以看出,自动拆箱是有可能抛出NullPointerException的,要留意避免。

2. 泛型与类型擦除(JDK 1.5)

从JDK 1.5开始,Java引入了泛型,但Java的泛型是通过类型擦除实现的(当然有很多人吐槽这不是真正的泛型),即只在源代码中有泛型定义,到了class级别就被擦除了(类的成员变量的泛型可以通过反射获取到)。

Map<String,String> map = new HashMap<String,String>(); map.put("hello world","你好啊,李银河"); String hello = map.get("hello"); System.out.println(hello); // 编译后,反省被擦除,并引入强制类型转换 Map map = new HashMap(); //类型擦除 map.put("hello", "你好啊,李银河"); String hello = (String)map.get("hello");//强制转换 System.out.println(hello); 

3. 方法变长参数(JDK 1.5)

public static void print(String... args) { for(String str : args){ System.out.println(str); } } // 编译后 public static void print(String... args) { String[] var1 = args; int var2 = args.length; //增强for循环的数组实现方式 for(int var3 = 0; var3 < var2; ++var3) { String str = var1[var3]; System.out.println(str); } } 

4. 接口Iterable支持的foreach语法(JDK 1.5)

很常见,不赘述

5. 枚举类型

6. 接口AutoCloseable支持的try-with-resource语法(JDK 1.7)

7. switch支持枚举、字符串

其他:

JDK1.8 待熟悉了Lambda的本质之后再决定补充与否。

作者:陈鹏
链接:https://www.zhihu.com/question/26971230/answer/268464546

猜你喜欢

转载自www.cnblogs.com/GarfieldEr007/p/10205298.html