在main方法中使用省略号?

时间:2012-01-06 11:12:03

标签: java

如果我在main方法中使用省略号会有什么不同吗?

public static void main(String... args) {

}

4 个答案:

答案 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()方法的单元测试也很有用。