如果我在main方法中使用省略号会有什么不同吗?
public static void main(String... args) {
}
答案 0 :(得分:7)
没有区别。该“省略号”语法称为varargs,其参数类型实际上是一个数组。
这意味着实际上有三个可能的有效main()
方法的签名:
public static void main(String[] args) {}
public static void main(String... args) {}
public static void main(String args[]) {}
答案 1 :(得分:4)
它没有任何区别,因为JVM在“编译”时将省略号(也称为“varargs”)转换为数组:
void myMethod(final X... args)
与
完全相同void myMethod(final X[] args)
或(不太常见)
void myMethod(final X args[])
答案 2 :(得分:2)
它是一样的。给出以下类文件:
$ cat MainEllipsis.java
public class MainEllipsis {
public static void main(String... args) {}
}
$ cat MainArray.java
public class MainArray {
public static void main(String[] args) {}
}
编译完成后(javac MainEllipsis.java MainArray.java
),我们可以使用javap -s <class>
检查已编译的签名:
> javap -s MainEllipsis
<...snip...>
public static void main(java.lang.String...);
descriptor: ([Ljava/lang/String;)V
和
> javap -s MainArray
<...snip...>
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
[Ljava/lang/String;
表示String[]
类型,表示生成的方法签名相同。
答案 3 :(得分:0)
除了别人提到的内容之外,我认为这对于编写main()方法的单元测试也很有用。