语法糖定义
语法糖(英语:Syntactic sugar)是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。
语法糖是啥?语法糖没有一个官方的定义(或者说定义相当宽泛),更像是一种观念:任何让你写着爽、但是实际发生的和你看到的不一样的东西都可以“被认为”是语法糖。例如最常见的Integer和int的自动装拆箱操作背后就是语法糖。看上去你在写。
Java中很常见的Foreach就属于语法糖的一个例子。
Foreach语法常用语数组和容器,不必使用下标来访问其中的元素,foreach将自动产生每一项。
public class ForeachTest2
{
public static void main(String[] args)
{
String arr[] = {
"hello","world"};
for(String s:arr)
{
System.out.println(s);
}
}
}
以上代码通过编译将会转化为:
public class ForeachTest2
{
public ForeachTest2()
{
super();
}
public static void main(String[] args)
{
int arr[] = {
1,2};
int [] arr$ = arr;
for(int len$ = arr$.length, i$ = 0; i$<len$; ++i$ )
{
int i = arr$[i$];
{
System.out.println(i);
}
}
}
}
可以看得出通过编译,编译器将 for(String s:arr)语句转化为我们平时常用的
for(int len$ = arr$.length, i$ = 0; i$<len$; ++i$ )去访问数组数组元素。
但平时访问数组使用Foreach语句更为简洁,提供了跟for(;;)相似的功能。
*********简单来说就是使用简单的语法来表达复杂的功能。
除了能让程序员方便使用的功能,当然也有让程序复杂的语言特性。语法盐就是一个例子。
语法盐(英语:syntactic salt)指的是让写出坏代码更难的语法特性。这些特性强迫程序员做出一些基本不用于描述程序行为,而是用来证明他们知道自己在做什么的额外举动。
Java语法糖
语法糖虽然不会提供实质的功能改进,但是它能方便程序员的开发。语法糖只存在于编译器。在编译器讲 .java文件编译成.class文件时,会进行语法糖的转换操作,将语法糖还原成原来的基础语法结构,实现基于编译器的新语法。 总而言之,语法糖可以看做是编译器实现的一些小把戏,这些小把戏会使程序员更加简单地进行程序开发,使得程序更加简洁,更具有可读性。
对于语法糖更多的知识,Java更底层的东西,建议大家多看看JVM的知识,看完会让大家对于Java的理解更上一层。时间多的话一定要看《深入理解Java虚拟机》!
Java语法糖常见类型
说明:在作者进行反编译时使用的是IDEA自带的反编译器,即直接点击.class文件获得反编译后的文件。后面会写一期IDEA如何如何进行反编译。
字符串拼接
Java拼接字符串主要有“+”号操作符,StringBuilder, StringBuffer,String 类的 concat 方法, String 类的 join 方法。
使用"+“号去拼接多个字符串是我们平时用的最多的一种方法,没有之一。那么对于”+"号拼接字符串时,编译器是如何处理的呢?
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = s1 + s2;
}
经过反编译转化为
public class Model {
public Model() {
}
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
(new StringBuilder()).append(s1).append(s2).toString();
}
}
可以看得出,编译器将字符型拼接转化为一个StringBuilder对象使用append()方法进行拼接
Switch语句
switch语句中的case标签可以为:
- 类型为cha