• Java 中的语法糖


    百度百科对语法糖的定义

      语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

      Java中的语法糖也是新增了一些语法,使得程序员使用更加方便。但是计算机底层还是使用基本语法来实现的。下面我们讨论几个经常使用到的语法糖,可变参数自动装箱/拆箱增强for循环

    可变参数

      没有可变参数时,我们使用同样功能的方法需要对该方法进行重载。将会有大量的重复代码,违反DRY(Don't repeat yourself)原则。但是有了可变参数我们可以传入不同个数的参数,调用同一个方法。

    源代码:

    public class VarialbeArgumentsDemo {
        public static void doWork(int... a) {//可变参数
            System.out.println("同一个功能!");
        }
        public static void main(String[] args) {
            doWork(1);
            doWork(1,2,3);//不同个数的参数,调用的同一个方法
        }
    }
    输出结果:
        同一个功能!
        同一个功能!

    将该文件的字节码反编译得到的代码:

    public class VarialbeArgumentsDemo{
      public static void doWork(int... a) {
        System.out.println("������������");
      }
      
      public static void main(String[] args){
        doWork(  new int[] { 1 });
        doWork(new int[] { 1, 2, 3 });//计算机底层用数组来实现,可变参数的传递
      }
    }

    我们发现可变参数的实质就是数组传参。

    自动装箱拆箱

      Java中有8种基本数据类型,它们不是对象。所以没有对应的方法,无法区分‘0’和‘NULL’,操作起来不方便,所以Java将它们封装成对象Byte、Short、Integer、Long、 Character、Float、Double、Boolean,并给出相应的方法。我们把一个基本数据类型赋给封装类对象,需要进行类型转换,而把一个封装类对象赋给一个基本数据类型需要解析。我们把这两个过程分别称为,装箱和拆箱。

      由于这两个操作经常要使用,装/拆操作繁琐而没有难度,所以Java就给出了自动装/拆箱操作,我们用Integer讨论,其它的7种一样。

    源代码:

    public class Test {
    
        public static void main(String[] args) {
            Integer num1 = 123;//将一个基本数据类型赋给Integer对象
            int num2 = num1;//将一个Integer对象赋给整形变量
        }
    }

    将该文件的字节码反编译得到的代码:

    public class Test{
      public static void main(String[] args) {
        Integer num1 = Integer.valueOf(123);//装箱操作
        int num2 = num1.intValue();//拆箱操作
      }
    }

    计算机底层依然是手动装箱拆箱。

    增强for循环

      增强for循环(foreach),让我们对数组和Iterator实例便利更加方便。语法格式:for(数据类型 类型名 : 数组名/Iterator实例名){}

    我们用增强for循环对整型数组进行遍历。

    源代码:

    public class Test {
    
        public static void main(String[] args) {
            int[] arr = new int[]{1,2,3,4,5};
            for (int ele : arr) {//对arr进行遍历输出
                System.out.print(ele);
            }
        }
    }

     将该文件的字节码反编译得到的代码:

    public class Test
    {
      public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        int[] arrayOfInt1;
        int j = (arrayOfInt1 = arr).length;//将原来的数组拷贝一份,防止破坏原有数据
        for (int i = 0; i < j; i++) {
          int ele = arrayOfInt1[i];
          System.out.print(ele);
        }
      }
    }

    增强for循环在底层依旧使用的for循环

    ============================================

    语法糖就是为了让某些固定格式的操作简化,程序员更方便,从而实现高效编程。

    Java中的语法糖还有很多条件编译、内部类、枚举类、泛型等等。

  • 相关阅读:
    CF | Alyona and Mex
    ACM | HDU|6227_Rabbit
    计蒜客 | 拓扑排序 | 虎威山上的分配
    ACM Secrete Master Plan
    map————两个数组的交集(2)
    set 集合————两个数组的交集
    哈希表、数组————有效的字母异位词
    贪心算法,双指针————分发饼干
    堆————数据流的第k个大的元素
    容器————priority_queue
  • 原文地址:https://www.cnblogs.com/yxiaooutlook/p/7617836.html
Copyright © 2020-2023  润新知