Jvm笔记总结(十二):Java语法糖

Jvm笔记总结(十二):Java语法糖

PS : 本文乃学习整理参考而来 ,目录参考 [ Jvm系列目录 ]


语法糖

        可以看做是编译器实现的一些“小把戏”,这些他们或许能提高效率,提升语法的严谨性,减少编码出错等,目的是为了让程序员写代码的效率提升。

主要体现有:

1.泛型与类型擦除
2.自动装箱、拆箱与遍历循环
3.条件编译


1.泛型与类型擦除
如下代码:

  public static void main(String[] args) {
        Map<String,String> map = new HashMap<String, String>();
        map.put("one","1");
        map.put("two","2");
        System.out.println(map.get("one"));
        System.out.println(map.get("two"));

    }

如上代码,编译后,再经过反编译得如下代码:其中泛型都不见了,泛型类型都变成了原生的写法。编译期进行了解语法糖操作

 public static void main(String[] args)
  {
    Map map = new HashMap();
    map.put("one", "1");
    map.put("two", "2");
    System.out.println((String)map.get("one"));
    System.out.println((String)map.get("two"));
  }

如下代码: 无法通过编译,因为经过类型擦除后,方法参数一致,无法实现重载。(且返回值不参与重载)

 public class Test {


    public void method(List<String> list) {

    }

    public void method(List<Integer> list) {

    }

}

2.自动装箱、拆箱与遍历循环

 public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4);
        int sum = 0;
        for (int i : list) {
            sum += i;
        }

    }

如上代码编译后,再经反编译得以下代码:其中包含了泛型、自动装箱、自动拆箱、循环遍历变长参数等5中语法糖。自动装箱拆箱在编译后转变为了对应的包装还原方法,如:Integer.valueOf()Integer.intValue();而循环遍历代码则被还原成了迭代器的实现。

public static void main(String[] args)
  {
    List list = Arrays.asList(new Integer[] {   Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), Integer.valueOf(4) });
    int sum = 0;
    for (Iterator i$ = list.iterator(); i$.hasNext(); ) { int i = ((Integer)i$.next()).intValue();
      sum += i;
    }
  }

3.条件编译:Java中的条件编译的实现,是根据布尔常量值的真假,编译器会分支中不成立的代码块消除

public static void main(String[] args) {

        if (true) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }

    }

以上代码编译后,再经反编译得如下代码:其中不成立的false分支被消除掉了。

public static void main(String[] args)
  {
    System.out.println(true);
  }

        除了泛型、自动装箱、自动拆箱、遍历循环、变长参数条件编译以外,Java语言还有其他语法糖,如:内部类、枚举类、对枚举字符串的switch支持等等。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值