2008-11-19 15 views

Antwort

78

Der einzige Unterschied zwischen den beiden ist die Art, wie Sie die Funktion aufrufen. Mit String var args können Sie die Array-Erstellung weglassen.

public static void main(String[] args) { 
    callMe1(new String[] {"a", "b", "c"}); 
    callMe2("a", "b", "c"); 
    // You can also do this 
    // callMe2(new String[] {"a", "b", "c"}); 
} 
public static void callMe1(String[] args) { 
    System.out.println(args.getClass() == String[].class); 
    for (String s : args) { 
     System.out.println(s); 
    } 
} 
public static void callMe2(String... args) { 
    System.out.println(args.getClass() == String[].class); 
    for (String s : args) { 
     System.out.println(s); 
    } 
} 
6

Auf die Empfängergröße erhalten Sie ein Array von String. Der Unterschied ist nur auf der anrufenden Seite.

7

Sie rufen die erste Funktion als:

function(arg1, arg2, arg3); 

während die zweite:

String [] args = new String[3]; 
args[0] = ""; 
args[1] = ""; 
args[2] = ""; 
function(args); 
8

mit varargs (String...) können Sie die Methode, um diese Art und Weise können auch anrufen:

function(arg1); 
function(arg1, arg2); 
function(arg1, arg2, arg3); 

Y Das geht nicht mit Array (String[])

+0

meine Lieblingsantwort –

+0

Klar und prägnant! –

17

Der Unterschied ist nur beim Aufruf der Methode. Die zweite Form muss mit einem Array aufgerufen werden, die erste Form kann mit einem Array aufgerufen werden (genau wie die zweite, ja, ist nach Java-Standard gültig) oder mit einer Liste von Strings (mehrere Strings durch Komma getrennt) oder ohne Argumente (die zweite muss immer eine haben, mindestens Null muss übergeben werden).

Es ist syntaktisch Zucker. Tatsächlich ist der Compiler dreht

function(s1, s2, s3); 

in

function(new String[] { s1, s2, s3 }); 

intern.

2
class StringArray1 
{ 
    public static void main(String[] args) { 
     callMe1(new String[] {"a", "b", "c"}); 
     callMe2(1,"a", "b", "c"); 
    callMe2(2); 
     // You can also do this 
     // callMe2(3, new String[] {"a", "b", "c"}); 
} 
public static void callMe1(String[] args) { 
     System.out.println(args.getClass() == String[].class); 
     for (String s : args) { 
      System.out.println(s); 
     } 
    } 
    public static void callMe2(int i,String... args) { 
     System.out.println(args.getClass() == String[].class); 
     for (String s : args) { 
      System.out.println(s); 
     } 
    } 
} 
Verwandte Themen