java 中的 String[] 数据和 String... 数据有什么区别
What is the difference between String[] data and String... data in java
我已经尝试使用 data 和 data1 变量。它总是调用 String ... data。
那么,String[] data 和 String... data in java.
有什么区别
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);
}
}
}
在 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);
}
}
}
输出:
---From: String ... data---
A
B
C
---From: String[] ... data---
A
B
C
D
E
在存在两个版本的方法签名的情况下,JVM 选择最接近的匹配,这就是为什么它在 arrayTest.test(data)
的情况下进入 test(String... 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);
}
}
method(String... s) // fine
method(int i , String... s) // fine
method(String... s,int i) // not fine , ...s should be last or only parameter
method(String[] s) // fine
method(int i , String[] s) // fine
method(String[] s,int i) // fine
method(String s[]) // fine
method(String s...) // not fine can't put dot's after variable name
method(int[] i , String[] s) //fine
method(int... i , String...) // not fine, only one var arg is allowed
method(String... s) // takes any number of comma separated string also the array of String
method(String[] s) //only takes array of String but not comma separated string
最后 -> (String[]... s) 等价于 (String[][] s)
当使用 Varargs (T...) 时,参数被打包到一个数组中,该数组在 运行 时传递给方法。
您已经用自己的实现回答了您的问题:
对于:
1) public void test(String[] ... data) -- 数据打包为 String[][]
2) public void test(String ... data) -- 数据被打包为 String[]
我强烈推荐这本书:Java generics and collections - 作者:Maurice Naftalin
String ... 将读取包含多个单词的单个句子。
String[] ... 会读一段多句。
我已经尝试使用 data 和 data1 变量。它总是调用 String ... data。 那么,String[] data 和 String... data in java.
有什么区别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);
}
}
}
在 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);
}
}
}
输出:
---From: String ... data---
A
B
C
---From: String[] ... data---
A
B
C
D
E
在存在两个版本的方法签名的情况下,JVM 选择最接近的匹配,这就是为什么它在 arrayTest.test(data)
的情况下进入 test(String... 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);
}
}
method(String... s) // fine
method(int i , String... s) // fine
method(String... s,int i) // not fine , ...s should be last or only parameter
method(String[] s) // fine
method(int i , String[] s) // fine
method(String[] s,int i) // fine
method(String s[]) // fine
method(String s...) // not fine can't put dot's after variable name
method(int[] i , String[] s) //fine
method(int... i , String...) // not fine, only one var arg is allowed
method(String... s) // takes any number of comma separated string also the array of String
method(String[] s) //only takes array of String but not comma separated string
最后 -> (String[]... s) 等价于 (String[][] s)
当使用 Varargs (T...) 时,参数被打包到一个数组中,该数组在 运行 时传递给方法。 您已经用自己的实现回答了您的问题:
对于:
1) public void test(String[] ... data) -- 数据打包为 String[][]
2) public void test(String ... data) -- 数据被打包为 String[]
我强烈推荐这本书:Java generics and collections - 作者:Maurice Naftalin
String ... 将读取包含多个单词的单个句子。
String[] ... 会读一段多句。