0. 前言
- 为什么需要语法糖?语法糖可以让程序更加简洁,有更高的可读性。举个不太恰当但是可以说明问题的例子,很多饭店每天需要买菜,一般的买菜单都是由厨师手写的,而有些蔬菜的名字比较难写,所以他们在写的时候跟采购的人达成一致,例如:厨师写的是“九菜”,采购员采购的时候会自动购买“韭菜”,这没有改变和影响采购过程,但是厨师在写菜单的时候方便了不少。
- 什么是语法糖?语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。这些语法在编译器编译的过程中会被替换,不影响最终生成的字节码。
- 语法糖是如何工作的?Java虚拟机并不支持这些语法糖,这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程称为解语法糖。如果你去看com.sun.tools.javac.main.JavaCompiler的源码,你会发现在compile()中有一个步骤就是调用desugar(),这个方法就是负责解语法糖的实现的。
下面的语法糖都可以通过一些简单的程序经过反编译之后看到细节,感兴趣的可以自己在IDE中尝试,反编译的工具有JD-GUI,javap,jad,CRF等。
1. String中的“+”背后采用StringBuild实现
在Java7之前我们在使用String进行字符串拼接操作的时候是这样的:
// 例如我们想拼接“hello” 和 “world”
//我们需要下面这样,这个时候相当于创建了一个新的String对象
// 频繁使用 + 操作会导致生成大量无用的中间对象
String a = "hello";
String b = "world";
String c = a + b;
但是有了语法糖之后,在对String类型的对象进行 + 操作的时候,其背后是通过StringBulid实现的,这就避免了大量不必要的中间对象生成。
2. switch 支持 String 与枚举
Java中的swith自身原本就支持基本类型。比如int、char等。对于int类型,直接进行数值的比较。对于char类型则是比较其ascii码。所以