В чем разница между String[] и String... в Java?

как я должен объявить main() метод в Java?

такой:

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

или такой:

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

в чем на самом деле разница между String[] и String... если какие-то?

5 ответов


как я должен объявить метод main () в Java?

String[] и String... то же самое внутренне, я. e., массив строк. Разница в том, что при использовании параметра 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();

и когда вы объявляете параметр как массив строк, вы должны позвоните сюда:

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 он должен быть последним параметром метода, и у вас может быть только один параметр с переменным числом аргументов.

вы можете ознакомиться с varargs: http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html


String... преобразуется к String[]. Основное отличие заключается в том, что вы можете вызвать метод vararg двумя способами:

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

тогда как вам нужно вызвать метод, который принимает такой массив:

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

на main метод это не имеет значения.


String[] args принимает в качестве аргумента массив.

String... args принимает в качестве аргумента произвольное количество строк и создает из них массив.


String[] - это массив строк. Поэтому контейнер многих переменных String тип данных. Например:

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

String str = "Hello World";

надеюсь, что это очищает ваши запросы :)


позволяет понять разницу через пример и его очень легко

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 [ ] )
Когда мы создаем массив в основном методе " Data []", они создают новый объект и получают там пространство в памяти
а также Когда мы создаем метод и определяем там аргумент типа: -
getid (int []) - > это создаст другой объект в памяти, поэтому у нас есть 2 объекта в памяти, которые одинаковы друг для друга

2)вы ничего не можете передать при использовании "... "
В Примере два вы ничего не можете передать при вызове метода "getid", и они будут работать без каких-либо ошибок, что очень полезно, чтобы сделать программу более стабильной, например

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


Но если мы вызовем метод "getid" и не передадим аргумент при использовании " [ ]", то он покажет ошибку при компиляции время