面试面试8.21- 什么是可变长参数?
小u从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。就比如下面的这个 printVariable
方法就可以接受 0 个或者多个参数。
1 2 3
| public static void method1(String... args) { }
|
另外,可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数。
1 2 3
| public static void method2(String arg1, String... args) { }
|
遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?
答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。
我们通过下面这个例子来证明一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class VariableLengthArgument {
public static void printVariable(String... args) { for (String s : args) { System.out.println(s); } }
public static void printVariable(String arg1, String arg2) { System.out.println(arg1 + arg2); }
public static void main(String[] args) { printVariable("a", "b"); printVariable("a", "b", "c", "d"); } }
|
输出:
另外,Java 的可变参数编译后实际会被转换成一个数组,我们看编译后生成的 class
文件就可以看出来了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class VariableLengthArgument {
public static void printVariable(String... args) { String[] var1 = args; int var2 = args.length;
for(int var3 = 0; var3 < var2; ++var3) { String s = var1[var3]; System.out.println(s); }
} }
|