使用“字符串...”时的参数顺序

Yas*_*che 1 java

我正在编写一个带有可变数量参数的方法,使用 Java 提出的构造函数:

public static boolean myMethod(String... strings)   {
    for (String s: strings)    {
         // Applying some logic / treatment on strings
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道:Java 如何处理strings参数?是把它当作一个ArrayList,还是一个简单的String[]?在执行方法时是否保持参数的顺序?


例如,如果我像这样使用我的方法:

MyMethodUtils.myMethod(first, second, third, fourth, fifth);
Run Code Online (Sandbox Code Playgroud)

我保证first会先治疗,然后second等等......还是不?

额外问题:这种构造函数的具体名称是什么String...(在 Java 中)?

And*_*ner 5

是的,排序被保留。

这是因为String...(技术上称为可变参数,但通常非正式地称为“可变参数”)只是String[]. 所以:

MyMethodUtils.myMethod(first, second, third, fourth, fifth);
Run Code Online (Sandbox Code Playgroud)

等同于

MyMethodUtils.myMethod(new String[]{first, second, third, fourth, fifth});
Run Code Online (Sandbox Code Playgroud)

(实际上,您可以调用后者)。

在任何其他情况下,您都不会期望数组的元素改变顺序,也不会期望它们具有可变的 arity 参数。

您可以在JLS Sec 15.12.4.2 中找到它:

如果m使用k ? n实参表达式调用,或者,如果m使用k = n实参表达式调用并且第k' 个参数表达式的类型与赋值不兼容T[],则参数列表(e1, ..., en-1, en, ..., ek)被评估为好像它写为(e1, ..., en-1, new |T[]| { en, ..., ek }),其中|T[]|表示的擦除(第 4.6 节)T[]。