Java 中的 String\[\] 和 String... 有什么区别?

新手上路,请多包涵

我应该如何在 Java 中声明 main() 方法?

像这样:

 public static void main(String[] args)
{
    System.out.println("foo");
}

或者像这样:

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

String[]String... 之间究竟有什么区别(如果有的话)?

原文由 Edward Ruchevits 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 532
2 个回答

我应该如何在 Java 中声明 main() 方法?

String[]String... 在内部是一样的,即字符串数组。不同之处在于,当您使用可变参数( String... )时,您可以调用如下方法:

 public void myMethod( String... foo ) {
    // do something
    // foo is an array (String[]) internally
    System.out.println( foo[0] );
}

myMethod( "a", "b", "c" );

// OR
myMethod( new String[]{ "a", "b", "c" } );

// OR without passing any args
myMethod();

当您将参数声明为 String 数组时,您 必须 这样调用:

 public void myMethod( String[] foo ) {
    // do something
    System.out.println( foo[0] );
}

// compilation error!!!
myMethod( "a", "b", "c" );

// compilation error too!!!
myMethod();

// now, just this works
myMethod( new String[]{ "a", "b", "c" } );

String[]String 之间究竟有什么区别……如果有的话?

约定是使用 String[] 作为主要方法参数,但使用 String... 也有效,因为当你使用可变参数时,你可以调用方法,就像调用方法一样数组作为参数,参数本身将是方法体内的一个数组。

一件重要的事情是,当您使用可变参数时,它必须是方法的最后一个参数,并且您只能有一个可变参数。

您可以在此处阅读有关可变参数的更多信息:http: //docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

原文由 davidbuzatto 发布,翻译遵循 CC BY-SA 3.0 许可协议

String... 被转换为 String[] 。主要区别在于您可以通过两种方式调用可变参数方法:

 method(a, b, c);
method(new String[] {a, b, c});

而您需要调用一个接受数组的方法,如下所示:

 method(new String[] {a, b, c});

对于 main 方法,它没有区别。

原文由 assylias 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题