Java中的可变参数Varargs

文章作者:Tyan
博客:noahsnail.com

1. 可变参数Varargs介绍

在JDK 1.5之前,要想在方法中使用可变参数,则必须通过数组(或其它集合)来实现,在这种情况下你需要将变量显式的定义在数组中,在使用时要从数组中取出变量。另一种方法是进行函数重载。而在JDK 1.5中,引入了可变参数(Varargs),全称为variable number of arguments,常被称为variable arguments。可变参数仍然是通过数组来实现的,只不过编译器帮你隐式的实现了这个过程,此外,它还能兼容以前的API。

可变参数,也就是说可以在参数列表中使用个数不确定的参数,最经典的例子就是Java中的main方法,参数的个数没有办法确定,此时就可以使用可变参数来处理方法中的参数。使用时可以按照数组的使用方式来用。

下面是可变参数定义的例子:

1
2
3
4
5
6
7
public static String format(String pattern, Object... arguments) {
...
for(Object temp : arguments) {
//业务逻辑
}
...
}

2. 使用可变参数的一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class IntSum {

public int sum(int... intArray) {
int sumInt = 0 ;
for (int temp : intArray) {
sumInt += temp;
}
return sumInt;
}


public static void main(String[] args) {
// TODO Auto-generated method stub
IntSum test = new IntSum();
System.out.println(test.sum(1));
System.out.println(test.sum(1, 2));
System.out.println(test.sum(1, 2, 3));

}

}

输出结果为:1,3,6。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class IntSum {

public int sum(int a) {
return 0;
}

public int sum(int... intArray) {
int sumInt = 0 ;
for (int temp : intArray) {
sumInt += temp;
}
return sumInt;
}


public static void main(String[] args) {
// TODO Auto-generated method stub
IntSum test = new IntSum();
System.out.println(test.sum(1));
System.out.println(test.sum(1, 2));
System.out.println(test.sum(1, 2, 3));

}

}

输出结果为:0,3,6

3. 使用可变参数的注意事项

  • 可变参数只有当参数数目不确定时才会使用。

  • 当参数中需要T[]作为参数时,可以考虑使用可变参数。

  • 可变参数只能用在参数列表中的最后一个位置,且方法中只能有一个可变参数。

  • 在方法调用时,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则优先选择固定参数的方法。

  • 由于使用可变参数需要隐式的创建匿名数组并初始化,因此会影响性能,在性能优先的情况下慎用。

  • 尽量避免重载含有可变参数的方法。

  • 可变参数输入时不能传null值。

  • Arrays.asList()方法支持可变参数。

参考资料:

1、Effective Java 2.0

2、http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

3、http://www.cnblogs.com/lanxuezaipiao/p/3190673.html

4、http://javarevisited.blogspot.com/2011/09/variable-argument-in-java5-varargs.html

如果有收获,可以请我喝杯咖啡!