Mad*_*tha 5 java variadic-functions
我曾尝试使用data和data1变量。它总是调用String ... data。那么,java中的String[]数据和String...数据有什么区别呢?
public class ArrayTest {
public static void main(String[] args) {
ArrayTest arrayTest = new ArrayTest();
// Option one
String[] data = {"A", "B", "C"};
// Option two
String data1 = "A";
arrayTest.test(data);
}
public void test(String[] ... data ) {
System.out.println("---From: String[] ... data---");
for(String[] item: data) {
for(String innerItem : item) {
System.out.println(innerItem);
}
}
}
public void test(String ... data ) {
System.out.println("---From: String ... data---");
for(String item: data) {
System.out.println(item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您正在test(String... data)传递一个字符串数组,并且test(String[]... data)您正在传递一个字符串数组的数组。检查更新后的代码以进行说明:
public class ArrayTest {
public static void main(String[] args) {
ArrayTest arrayTest = new ArrayTest();
// Option one
String[] data = { "A", "B", "C" };
// Option two
arrayTest.test(data);
String[] data2 = { "D", "E" };
arrayTest.test(data, data2);
}
public void test(String[]... data) {
System.out.println("---From: String[] ... data---");
for (String[] item : data) {
for (String innerItem : item) {
System.out.println(innerItem);
}
}
}
public void test(String... data) {
System.out.println("---From: String ... data---");
for (String item : data) {
System.out.println(item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
---From: String ... data---
A
B
C
---From: String[] ... data---
A
B
C
D
E
Run Code Online (Sandbox Code Playgroud)
在存在两个版本的方法签名的情况下,JVM 会选择最接近的版本,这就是为什么它会test(String... data)在 的情况下转到,而在 的情况下arrayTest.test(data)会转到。test(String[]... data)arrayTest.test(data, data2)
如果删除以下定义,该程序仍然可以运行,但 JVM 将只剩下一个选择,即test(String[]... data)两个调用都进行。
public void test(String... data) {
System.out.println("---From: String ... data---");
for (String item : data) {
System.out.println(item);
}
}
Run Code Online (Sandbox Code Playgroud)