【问题标题】:Is there any difference between String... args and String[] args in Java? [duplicate]Java 中的 String... args 和 String[] args 之间有什么区别吗? [复制]
【发布时间】:2015-09-06 02:43:59
【问题描述】:

String... argsString[] args 在 Java 中的区别是什么?

我是 Java 编程新手。 谁能告诉我 (String....args) 和 (String [] args) 之间有什么区别,如果我用第一个代替第二个........有什么区别吗?

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

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

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

【问题讨论】:

标签: java main variadic-functions


【解决方案1】:

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

【讨论】:

  • 这是最好的答案。它清楚地显示了语法/用法的差异。
  • @hungryghost OP 专门询问了main(甚至标记了问题main)。
  • @ElliottFrisch,问题本身并没有提到main,尽管我确实看到它是这样标记的。 String...argsString[] args 确实是一个更一般的 Java 问题,但如果 OP 特别想知道 main,那么您的答案就很好。我也会赞成你的(即使整个问题一开始就是一个骗局)! ;)
【解决方案2】:

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

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

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

public static void main(String[] args)


public static void main(String... args)

未明确列出(但也允许)

public static void main(String args[])

【讨论】:

  • 我只想输入最后一种形式,虽然在技术上允许且有效,但 String[] 形式通常更可取,因为括号表示实际参数类型是 String[] 和参数名称是对String[] 类型对象的引用。我猜更多的是对惯例的偏好......
【解决方案3】:

main 方法中几乎没有区别,它们的工作方式相同。

String... 被称为可变参数。可变参数的好处是它是非常好的语法糖,它可以让你无限期地定义方法调用的参数。在方法的主体中,可变参数被完全视为类型的数组。

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

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2014-02-22
    • 2012-06-17
    • 1970-01-01
    • 2010-09-23
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多