public static void main(String args[])
的String args[]
是如何实现的?是否实现为varargs
?
我问这个问题是因为args.length
只给出了传递的参数数量,这意味着它没有像String args[] = new String[30]
那样在任何地方定义。这个数组是如何实现的?
它的实现完全像它看起来的那样——作为字符串数组。另一方面,Varargs是作为数组实现的——String...
只是String[]
的语法糖。
它是声明的(不是实现的),但是你说它是声明的。使用varargs声明函数是完全合法的:
public static void main(String... argv)
编译器接受varargs声明并将其转换为字节码中的String[]
。这种情况发生在所有使用变量的函数中。
当JVM开始运行您的程序时,它会创建一个数组,该数组的长度正好等于命令行参数的数量(不包括任何用于JVM本身的参数,如-D
)。然后在指定的类中搜索main函数并调用它。
它只是一个字符串数组,在启动时用传递给进程的参数值初始化。它不是一个变量参数列表