В чем разница между 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" и не передадим аргумент при использовании " [ ]", то он покажет ошибку при компиляции время