我正在编写一个带有可变数量参数的方法,使用Java提出的构造函数:
public static boolean myMethod(String... strings) {
for (String s: strings) {
// Applying some logic / treatment on strings
}
}
我想知道:Java如何使用strings
参数进行操作?它需要ArrayList
还是简单的String[]
?通过方法时是否保留了参数的顺序?
例如,如果我使用我的方法:
MyMethodUtils.myMethod(first, second, third, fourth, fifth);
我保证first
会先被处理,然后会被second
等等......或者不会?
加分问题:此类构造函数String...
的特定名称是什么?(在Java中)?
答案 0 :(得分:4)
是的,保留了订购。
这是因为String...
(技术上称为variable arity parameter,但通常非正式地称为“varargs”)只是String[]
的语法糖。所以:
MyMethodUtils.myMethod(first, second, third, fourth, fifth);
与
相同MyMethodUtils.myMethod(new String[]{first, second, third, fourth, fifth});
(事实上,你可以调用后者)。
您不希望数组的元素在任何其他情况下更改顺序,也不会使用变量arity参数。
您可以在JLS Sec 15.12.4.2中找到:
如果使用
m
实际参数表达式调用k ≠ n
,或者使用m
实际参数表达式和{{1}的类型调用k = n
第二个参数表达式与k
的赋值不兼容,然后对参数列表T[]
进行求值,好像它被写为(e1, ..., en-1, en, ..., ek)
,其中(e1, ..., en-1, new |T[]| { en, ..., ek })
表示擦除(|T[]|
的§4.6)。
答案 1 :(得分:0)
奖金问题:这种构造函数的具体名称是什么 String ...(在Java中)?
这些类型的构造函数的名称仅是参数化构造函数。
唯一的区别是这些是使用Varargs。
变量参数(Varargs):
varrags允许该方法接受零个或多个参数。 在varargs之前,我们要么使用重载方法,要么采用数组作为 方法参数,但它不被认为是好的,因为它导致 维修问题。如果我们不知道我们会有多少论点 必须传递方法,var args是更好的方法。
答案 2 :(得分:0)
您将按照您编写的顺序获取这些参数,请参阅上面的示例,我可以说,
首先是第一个,第二个是第二个
Java将其作为字符串[]
回答奖金问题
没有特定的名称,但您以这种方式传递的参数称为" var args"
希望你满意:)