字符串[]数据和字符串[]之间的区别是什么。。。java中的数据

字符串[]数据和字符串[]之间的区别是什么。。。java中的数据,java,variadic-functions,Java,Variadic Functions,我试过使用data和data1变量。它总是调用字符串。。。数据。 那么,String[]data和String之间的区别是什么呢。。。java中的数据 public class ArrayTest { public static void main(String[] args) { ArrayTest arrayTest = new ArrayTest(); // Option one String[] data = {"A", "B"

我试过使用data和data1变量。它总是调用字符串。。。数据。 那么,String[]dataString之间的区别是什么呢。。。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)
的情况下,JVM会选择
test(String[]…data)
而在
arrayTest.test(data,data2)
的情况下,JVM会选择
test(String[]…data)

如果删除以下定义,程序仍将工作,但JVM将只有一个选择,即对两个调用都转到
test(String[]…data)

public void test(String... data) {
    System.out.println("---From: String ... data---");
    for (String item : data) {
        System.out.println(item);
    }
}
最后,在使用Varargs时->(字符串[]…s)与(字符串[][]s)等价。

参数被打包到一个数组中,该数组在运行时传递给方法。 您已经用自己的实现回答了您的问题:

用于:

1) 公共无效测试(字符串[]……数据)--数据打包为字符串[][]

2) 公共无效测试(字符串…数据)--数据打包为字符串[]

我强烈推荐Maurice Naftalin的书:《Java泛型和集合》

将阅读一个包含多个单词的句子


String[].将阅读一段多个句子。

String[].
String[].
@SamiKuhmonen不一样。那么我的问题是,为什么两种测试方法可以同时使用?为什么总是调用
String…
method?您的问题是关于
String[]。。。数据
类似于您的代码还是关于
字符串[]数据
类似于您的标题?
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