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

Edw*_*its 25 java arrays program-entry-point

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

像这样:

public static void main(String[] args)
{
    System.out.println("foo");
}
Run Code Online (Sandbox Code Playgroud)

或者像这样:

public static void main(String... args)
{
    System.out.println("bar");
}
Run Code Online (Sandbox Code Playgroud)

究竟有什么区别String[],String...如果有的话?

dav*_*tto 40

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

String[]并且String...在内部是相同的,即一个字符串数组.不同之处在于,当您使用varargs参数(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();
Run Code Online (Sandbox Code Playgroud)

当你将参数声明为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" } );
Run Code Online (Sandbox Code Playgroud)

实际上String[]String... 之间的区别是什么?

惯例是使用String[]作为主要的方法参数,但也使用String...工作,因为当您使用varargs时,您可以调用方法,就像调用带有数组作为参数的方法一样,参数本身将是方法内的数组身体.

一个重要的是当你使用vararg时,它需要是方法的最后一个参数,你只能有一个vararg参数.

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


ass*_*ias 5

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

method(a, b, c);
method(new String[] {a, b, c});
Run Code Online (Sandbox Code Playgroud)

而你需要调用一个接受这样的数组的方法:

method(new String[] {a, b, c});
Run Code Online (Sandbox Code Playgroud)

对于该main方法,它没有任何区别.