为什么Java的主要不使用可变长度参数列表?

我对Java声明的语法有疑问:main

public static void main (String[] args)

既然在调用 main 函数时可以传递可变数量的字符串,这难道不应该是一个可变长度的参数列表而不是一个数组吗?为什么使用字符串参数列表对此方法进行命令行调用甚至有效?(除非有幕后处理,使用字符串列表构建一个数组,然后将该数组传递给main方法...?)主要声明不应该更像这样吗??-

public static void main(String... args) 

答案 1

main(String... args)并且实际上是一回事:你得到的是一个数组。varargs只是调用者的句法糖。main (String[] args)String

我猜你从来没有从代码调用过,所以在引入varargs时它没有被改造。main()

编辑:实际上,划伤最后一句话。 当然,是完全有效的语法。这两种样式是完全可互换的。这工作得很好:main(String... args)

public class Test {

    public static void main(String... args) {
        System.out.println("Hello World");
    }

}

答案 2

你可以用任何一种方式声明main,它工作得很好。不存在“向后兼容性”或“改造”问题。但是,代码的读者可能会发现它分散了注意力,并且不太可能以任何方式改进您的程序。

Java语言规范(第三版)第8.4.1节说:“如果最后一个形式参数是T类型的变量arity参数,则认为它定义了T[]类型的形式参数”。

Java 程序如何启动的规范在 JLS 12.2 中,它引用了 VM 规范的第 5 章。VM 规范第 5.2 节指出 VM 调用公共类方法 “”。由于 VM 规范没有可变 arity 的概念,因此使用 “” 声明的主节点满足要求。void main(String[])...