不要你写汇编,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

Java中有哪些语法糖?的更多相关文章

  1. JVM(二):Java中的语法糖

    JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法 ...

  2. Java 中的语法糖

    百度百科对语法糖的定义 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这 ...

  3. [转]谈谈Java中的语法糖

    *该博客转自 http://blog.csdn.net/danchu/article/details/54986442 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某 ...

  4. 浅析java中的语法糖

    概述 编译器是一种计算机程序, 它主要的目的是将便于人编写.阅读.维护的高级计算机语言所写的源代码程序, 翻译为计算机能解读.运行的低阶机器语言的程序, 即可执行文件.而 javac 就是java语言 ...

  5. 【Java基础】Java中的语法糖

    目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...

  6. Java中的语法糖

    一.范型 1. C#和Java范型的区别 在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类 ...

  7. Java 中的语法糖(7/15整个周六上午总结)

    语法糖定义指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会:但是这种语法对语言的功能并没有影响.Java中的泛型,变长参数,自动 ...

  8. Java 中的语法糖,真甜。

    我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 我们在日常开发中经常会使用到诸如泛型.自动拆箱和装箱 ...

  9. java新的语法糖:Java 8 Lambda表达式

    ***************************************************************************

随机推荐

  1. 使用JDBC连接数据库报“找不到驱动程序”错误解决

    1.jre安装不成功: 2.jre中没有数据库驱动(D:\jre\lib\ext 中查看)

  2. Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)

    在Android 2.3(Gingerbread) 系统的时候,我写过一篇关于“Android 震动马达系统“的文章,当时的Linux内核还是2.6版本的.写那篇文章的目的,是想彻底的了解从硬件到驱动 ...

  3. 【ES】学习4-结构化搜索

    1. 结构化搜索得到的结果只有是和否,没有相似概念. term可以实现精确值查询 curl -XGET 'localhost:9200/logstash-cowrie/_search?pretty' ...

  4. Luogu P2426 【删数】

    状态定义: 一眼区间$DP$,从左右两边删不好定义状态,不如定义$dp[i][j]$表示$[i,j]$未删的最大值,转移就很自然了 转移: 从左边删$dp[i][j]=max(dp[i][j],dp[ ...

  5. iOS学习笔记之Block

    写在前面 学习iOS开发的过程中,在很多场合都遇到了Block.说实话,虽然自己依葫芦画瓢的将Block"拿来"用着,但这种"拿来主义"与学习时应持有的探索精神 ...

  6. python + selenium 模块封装及参数化

    模块封装 示例代码: baidu.py from time import sleep from selenium import webdriver driver = webdriver.Chrome( ...

  7. 在django中使用FormView,success_url死活不能生效的问题

    真的不知道是怎么回事, 以前都是手动的, form使用modelform. view使用createview. 今天写新系统时,为了更灵活. form使用form,(这样一来,可以在form是随便按数 ...

  8. Kibana加载样本数据

    kibana 6.2 加载样本数据 kibana loading sample data 下载样本数据 # 莎士比亚经典作品 wget https://download.elastic.co/demo ...

  9. 001.Open-Falcon简介

    一 Open-Falcon简介 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,相对成熟的解决方案 ...

  10. Python3 图片水平镜像实现

    # -*- coding: utf-8 -*- """ Created on Sun Feb 4 12:15:38 2018 @author: markli " ...