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

В чем разница между 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..., если таковая имеется?

4b9b3361

Ответ 1

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

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, вы MUST вызываете этот путь:

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

String str = "Hello World";

Надеемся, что это очистит ваши запросы:)