web-dev-qa-db-fra.com

Quelle est la différence entre String [] et String ... en Java?

Comment déclarer la méthode main() en Java?

Comme ça:

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

Ou comme ceci:

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

Quelle est la différence entre String[] et String... le cas échéant?

21
Edward Ruchevits

Comment dois-je déclarer la méthode main () en Java?

String[] et String... sont la même chose en interne, i. e., un tableau de chaînes . La différence est que lorsque vous utilisez un paramètre varargs (String...), vous pouvez appeler la méthode comme suit:

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

Et lorsque vous déclarez le paramètre en tant que tableau de chaînes, vous DEVEZ appeler ainsi:

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" } );

Quelle est la différence entre String[] et String... le cas échéant?

La convention est d'utiliser String[] comme paramètre de méthode principal, mais utiliser String... fonctionne également, car lorsque vous utilisez varargs, vous pouvez appeler la méthode de la même façon que vous appelez une méthode avec un tableau comme paramètre et que le paramètre lui-même sera un tableau à l'intérieur le corps de la méthode.

Une chose importante est que lorsque vous utilisez un vararg, il doit être le dernier paramètre de la méthode et vous ne pouvez avoir qu'un seul paramètre vararg.

Vous pouvez en savoir plus sur varargs ici: http://docs.Oracle.com/javase/1.5.0/docs/guide/language/varargs.html

33
davidbuzatto

String... est converti en un String[]. La principale différence est que vous pouvez appeler une méthode vararg de deux manières:

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

alors que vous devez appeler une méthode qui accepte un tableau comme ceci:

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

Pour la méthode main, cela ne fait aucune différence.

5
assylias

String[] args prend un argument de tableau.

String... args prend un nombre arbitraire de chaînes comme argument et crée un tableau à partir de celles-ci.

1
BenCole

Permet de comprendre la différence via l'exemple et son super facile 

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


Méthode getid prendre int type tableau. 

Donc, si nous appelons la méthode getId, nous devons passer à array.
Pour passer tableau, nous pouvons créer un tableau anonyme ou tout simplement tout d’abord créer un tableau et le passer comme dans l’illustration ci-dessous. 

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);
    }
}

Maintenant, nous utilisons ci-dessous un triple point -> mymethod (int ... i) 

maintenant, la méthode a toujours besoin du tableau, mais la différence est que nous pouvons lui passer une valeur directe et "..." le convertir automatiquement en tableau
Regardez l'exemple ci-dessous 

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);
    }

}

Avantage d'utiliser "..." au lieu de "[]"
1) Sa sauvegarde de mémoire: - 
dans l'exemple un utilisant mymethod (int []) 
Lorsque nous créons un tableau dans la méthode principale "Data []", ils créent un nouvel objet et y obtiennent un espace mémoire. 
ainsi que lorsque nous créons une méthode et définissons là un argument comme: 
getid (int []) -> cela créera un autre objet dans une mémoire, donc nous aurons 2 objets dans une mémoire qui sont identiques les uns aux autres

2) Vous ne pouvez rien passer en utilisant "..."
Dans le deuxième exemple, vous ne pouvez rien passer lorsque vous appelez la méthode "getid" et ils fonctionneront sans erreur, ce qui est très utile pour rendre le programme plus stable, par exemple. 

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


Mais si nous appelons la méthode "getid" et si aucun argument n’est passé lors de l’utilisation de "[]", alors l’erreur apparaitra au moment de la compilation. 

0
JVD

String[] est un tableau de chaînes. Par conséquent, un conteneur contenant de nombreuses variables de type de données String. Par exemple:

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

String str = "Hello World";

J'espère que cela efface vos questions :)

0
Michele La Ferla