下面方法中字符串后面的3个点是什么意思?

public void myMethod(String... strings) {
    // method body
}

当前回答

这意味着零个或多个String对象(或它们的单个数组)可以作为该方法的参数传递。

参见“任意数量的参数”部分:http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

在你的例子中,你可以这样调用它:

myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});

重要提示:以这种方式传递的参数始终是一个数组——即使只有一个。确保在方法体中也这样对待它。

重要说明2:获取…必须是方法签名中的最后一个。myMethod(int i, String…字符串)是好的,但myMethod(字符串…字符串,int i)是不行的。

感谢Vash在评论中的澄清。

其他回答

这个特性叫做可变参数,是Java 5中引入的一个特性。这意味着函数可以接收多个String参数:

myMethod("foo", "bar");
myMethod("foo", "bar", "baz");
myMethod(new String[]{"foo", "var", "baz"}); // you can even pass an array

然后,你可以使用String变量作为数组:

public void myMethod(String... strings) {
    for (String whatever : strings) {
        // do what ever you want
    }

    // the code above is equivalent to
    for (int i = 0; i < strings.length; i++) {
        // classical for. In this case you use strings[i]
    }
}

这个答案很大程度上借鉴了kiswa和Lorenzo的……也来自Graphain的评论。

这意味着零个或多个String对象(或它们的单个数组)可以作为该方法的参数传递。

参见“任意数量的参数”部分:http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

在你的例子中,你可以这样调用它:

myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});

重要提示:以这种方式传递的参数始终是一个数组——即使只有一个。确保在方法体中也这样对待它。

重要说明2:获取…必须是方法签名中的最后一个。myMethod(int i, String…字符串)是好的,但myMethod(字符串…字符串,int i)是不行的。

感谢Vash在评论中的澄清。

A really common way to see a clear example of the use of the three dots it is present in one of the most famous methods in android AsyncTask ( that today is not used too much because of RXJAVA, not to mention the Google Architecture components), you can find thousands of examples searching for this term, and the best way to understand and never forget anymore the meaning of the three dots is that they express a ...doubt... just like in the common language. Namely it is not clear the number of parameters that have to be passed, could be 0, could be 1 could be more( an array)...

语法: (三点…)——>表示我们可以添加0个或多个对象,传递参数或传递object类型的数组。

public static void main(String[] args){}
public static void main(String... args){}

定义: 1)对象…参数只是一个对象数组的引用。

2) ('String[]'或String…)它可以处理任意数量的字符串对象。在内部,它使用引用类型object的数组。

i.e. Suppose we pass an Object array to the ... argument - will the resultant argument value be a two-dimensional array - because an Object[] is itself an Object:

3)如果你想用一个参数调用方法,而它恰好是一个数组,你必须显式地将它包装起来

another. method(new Object[]{array}); 
OR 
method((Object)array), which will auto-wrap.

应用程序: 它主要用于参数数量是动态的(运行时知道的参数数量)和覆盖的情况。 一般规则-在方法中,我们可以传递任意类型和任意数量的参数。我们不能在任何特定参数之前添加object(…)参数。 即。

void m1(String ..., String s) this is a wrong approach give syntax error.
void m1(String s, String ...); This is a right approach. Must always give last order prefernces.   

只要把它想象成c#中的关键字params,如果你来自那个背景的话:)