• 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

  • 相关阅读:
    关于C的struct结构的几个常见疑问。
    NAT类型
    Linux oops stack 分析
    关于pci_dev的定义
    还是动态添加控件 触发事件
    页面编译模型
    MDX 销售额与上月比较
    C语言的词法语法分析lex&yacc 经典收藏
    interrupt storm
    js获取mac地址
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/10205298.html
Copyright © 2020-2023  润新知