首页 > 代码库 > Java语法糖1:可变长度参数

Java语法糖1:可变长度参数

先抄一段定义:

语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java 中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。

简而言之就是语法糖就是为了方便编程,但不影响语言本身功能的情况下做的一种语法处理。虽然没有对语言本身有实质性修改,但是语法糖在编程中能提高性能、或能提升语法的严谨性、或能减少编码出错的机会。

可变长度参数:我们传入方法的参数是不固定个数

 1     @Test
 2     public void test_getStr() {
 3         getStr("111", "222", "333");
 4     }
 5 
 6     public void getStr(String... ss) {
 7         StringBuilder sb = new StringBuilder();
 8         for (int i = 0; i < ss.length; i++) {
 9             sb.append(ss[i]);
10         }
11         System.out.println(sb);
12     }
getStr方法的参数是不确定参数,但是在遍历参数中使用的数组,可见变长参数是使用数组实现的。我们看下编译后的class文件:
  @Test
  public void test_getStr()
  {
    getStr(new String[] { "111", "222", "333" });
  }
  
  public void getStr(String... ss)
  {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < ss.length; i++) {
      sb.append(ss[i]);
    }
    System.out.println(sb);
  }

在测试方法中调用getStr(new String[] { "111", "222", "333" })里面的参数已经变成了数组,可见可变参数是利用数组实现的。

但是为什么不直接使用数组呢,原因很简单,数组初始化是需要指定长度的,在长度未知的情况下,使用变长参数比数组方便很多,而编译阶段根据参数个数转换成具体的数组交给编译器去处理,程序员岂不是很自在。

最后重要的一点:可变长度参数必须作为方法参数列表中的的最后一个参数且方法参数列表中只能有一个可变长度参数

Java语法糖1:可变长度参数