Java中的String ... args和String [] args之间有什么区别吗?

时间:2015-06-20 02:21:31

标签: java main variadic-functions

Java中String... argsString[] args之间有什么区别?

我是Java编程的新手。 任何人都可以告诉我(String....args)&的区别是什么? (String [] args)如果我使用第一个代替第二个........它有什么不同吗?

String... args将声明一个需要可变数量的String参数的方法。参数的数量可以是任何值:包括零。

String[] args和等效的String args[]将声明一个只需要一个参数的方法:一个字符串数组。

可能不会从这些观察结果中产生的一个区别是,在第二种情况下(但不是第一种情况),调用者可能会引用该数组。在这两种情况下,该方法都使用args作为字符串数组,但如果它执行交换数组元素之类的操作,则如果使用String... args形式,则调用者将无法看到它。

3 个答案:

答案 0 :(得分:15)

如果您使用void x(String...args)方法,则可以将其称为x("1", "2", "3"),而void x(String[] args)只能被称为x(new String[] {"1", "2", "3"})

答案 1 :(得分:6)

没有区别。并且允许String... args

JLS-12.1.4. Invoke Test.main说(部分)

  

方法main必须声明为publicstaticvoid。它必须指定一个形式参数(§8.4.1),其声明类型为String数组。因此,可以接受以下任一声明:

public static void main(String[] args)


public static void main(String... args)

未明确列出(但也允许)

public static void main(String args[])

答案 2 :(得分:1)

main 方法中,差异很小,它们的工作方式都相同。

String ... 称为varargs。 varargs的优点是它是非常好的语法糖,它允许您无限期地定义方法调用的参数。在方法体中,varargs被完全视为该类型的数组。

varargs的缺点是Java会将不确定的参数转换为新数组,从而产生垃圾。作为替代方法,如果垃圾创建必须为零,则可以使用方法重载来模拟varargs。