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

时间:2012-08-15 16:47:56

标签: java main arrays

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

像这样:

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

或者像这样:

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

String[]String...之间的差异究竟是什么?

5 个答案:

答案 0 :(得分:35)

  

我应该如何在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();

当您将参数声明为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...也可以,因为当你使用varargs时,你可以像调用带数组的方法一样调用方法作为参数,参数本身将是方法体内的一个数组。

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

您可以在此处详细了解varargs:http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

答案 1 :(得分:5)

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

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

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

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

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

答案 2 :(得分:1)

String[] args采用数组参数。

String... args将任意数量的字符串作为其参数,并从中创建一个数组。

答案 3 :(得分:0)

String[]是一个字符串数组。因此,容器中有许多String数据类型的变量。例如:

String[] strArray = new String[2];
str[0] = "Hello";
str[1] = "World";

String str = "Hello World";

希望这会清除您的疑问:)

答案 4 :(得分:0)

让我们通过示例及其超级简单

来理解差异
mymethod(String... str)
   vs
mymethod(String []str)


方法getid采用int类型数组。

因此,如果我们调用getId方法,我们需要传递数组 要传递数组,我们可以创建一个匿名数组,或者只是简单地创建一个数组并传递,就像我在下面的例子中所做的那样。

class test
{
    public void getid(int []i)
    {
      for(int value:i)
     {
      System.out.println(value);
     }
    }

    public static void main(String []arg)
    {
     int []data = {1,2,3,4,5}
     new test().getid(data);
    }
}

现在我们下面使用三点 - > mymethod(int ... i)

现在该方法仍然需要数组但现在我们可以将直接值传递给该方法并且" ..."自动将其转换为数组
看下面的例子

class test
{
    public void getid(int ...i)
    {
    for(int value:i)
    {
    System.out.println(value);
    }
    }
    public static void main(String []arg)
    {
    new test().getid(1,2,3,4);
    }

}

使用" ..."而不是" []"
1)它的存储空间: - 例如一个使用mymethod(int [])
当我们在main方法中创建一个数组"数据[]"他们创建新对象并在内存中获得空间
以及当我们创建方法并定义那样的参数时: -
getid(int []) - >这将在内存中创建另一个对象,因此我们在内存中有2个对象,它们彼此相同

2)使用" ..."
在示例二中,您可以在调用" getid"方法,他们将工作,而不会给出任何错误,这有助于使程序更稳定,例如

.
.
.
    public static void main(String []arg)
    {
    new test().getid();
    }
.
.
.


但如果我们打电话给#ge; getid"方法并没有在使用" []"时传递任何参数。那么它将在编译时显示错误