Java中的String... args
和String[] args
有什么区别?
我是Java编程的新手。谁能告诉我(String....args
)和(String [] args
)之间有什么区别,如果我用第一个代替第二个......有什么区别吗?
String... args
将声明一个需要可变数量的 String 参数的方法。参数的数量可以是任何内容:包括零。
String[] args
和等效的String args[]
将声明一个只需要一个参数的方法:字符串数组。
从这些观察中可能不会得出的一个区别是,在第二种情况下(但不是第一种情况),调用方可能具有对数组的引用。在这两种情况下,该方法都将 args 作为字符串数组使用,但如果它执行诸如交换数组元素之类的操作,则如果使用 String... args
形式,则调用者将看不到此操作。
如果你有void x(String...args)
方法,你可以按x("1", "2", "3")
调用它,而void x(String[] args)
只能作为x(new String[] {"1", "2", "3"})
调用。
没有区别。String... args
是允许的。
JLS-12.1.4. 调用Test.main
说(部分)
main 方法必须声明为
public
、static
和void
。它必须指定一个形式参数 (§8.4.1),其声明的类型是String
数组。因此,以下任一声明都是可以接受的:public static void main(String[] args) public static void main(String... args)
未明确列出(但也允许)
public static void main(String args[])
在主要方法中几乎没有区别,它们都将以相同的方式工作。
字符串...被称为varargs。varargs 的优点是它是非常好的语法糖,它允许您无限期地定义方法调用的参数。在方法的主体中,varargs 完全被视为该类型的数组。
varargs 的缺点是 Java 会将不定参数转换为新数组,从而产生垃圾。作为替代方法,如果垃圾创建必须为零,则可以使用方法重载来模拟 varargs。