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

36

我应该如何在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个回答

62

在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();

如果你将参数声明为字符串数组,则必须以此方式调用:

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


5

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

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

而你需要调用一个接受数组的方法,格式如下:

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

对于main方法,这没有任何区别。


4

String[] args 接受一个数组参数。

String... args 接受任意数量的字符串作为它的参数,并将它们创建成一个数组。


1

让我们通过一个例子来理解区别,这非常简单

mymethod(String... str)
   vs
mymethod(String []str)


方法getId接受一个整数类型的数组。

因此,如果我们调用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 []),当我们在主方法中创建数组"Data []"时,它们会创建新对象并在内存中获取其空间,以及当我们创建方法并定义其参数时,例如:getid(int [])->这将在内存中创建另一个对象,因此我们在内存中有2个相同的对象。

2)使用"..."时可以不传递任何内容
在第二个示例中,可以在调用"getid"方法时不传递任何内容,并且它们将在不给出任何错误的情况下工作,这对于使程序更加稳定非常有帮助。

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

但是如果我们调用“getid”方法并在使用“[]”时没有传递任何参数,那么它将在编译时显示错误。

0

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

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

String str = "Hello World";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接