2013-07-07 5 views
70

Wenn ich deklarieren eine String Array:String Array-Initialisierung in Java

String names[] = new String[3]; 

Dann warum können wir nicht Werte der obigen wie folgt erklärt Array zuweisen:

names = {"Ankit","Bohra","Xyz"}; 
+1

"Array-Konstanten können nur in Initialisierern verwendet werden"; ist das nicht Grund genug? Es sei denn, Sie suchen nach "gesetzgebender Absicht". – zEro

Antwort

126

Sie können folgendes tun während der Deklaration:

String names[] = {"Ankit","Bohra","Xyz"}; 

Und wenn Sie dies nach der Deklaration tun wollen:

String names[]; 
names = new String[] {"Ankit","Bohra","Xyz"}; 
+0

Als ich fragte, warum wir es nicht mit geschweiften Klammern nach der Erklärung als Array von 3 initialisieren können. –

+0

@AnkitBohra. Das macht der zweite Ausschnitt. –

+10

@AnkitBohra, weil '{" x "," y "," z "}' keine Array-Instanz ist. Während 'new String [] {" x "," y "," z "}' ist. – zEro

13
names[] = {"Ankit","Bohra","Xyz"}; 

ist ein Initialisierer und verwendet ausschließlich bei der Konstruktion oder ein Objekt neue Array zu schaffen. Es kann nicht verwendet werden Set das Array. Sie können es verwenden, wenn deklariert als:

String[] names= {"Ankit","Bohra","Xyz"}; 

können Sie auch verwenden:

names=new String[] {"Ankit","Bohra","Xyz"}; 
+0

Wie macht es einen Unterschied, wenn wir verwenden müssen - ** String [] names = {" Ankit "," Bohra "," Xyz "}; ** und wenn ** names = new String [] {" Ankit "," Bohra "," Xyz "}; **, alle Anwendungsfälle, in die es passt. Vielen Dank im Voraus @hexafraction. –

+1

@ Avenger Nichts. Beide machen das gleiche, wenn ich mich richtig erinnere. – hexafraction

2

Du meinst, wie:

String names[] = {"Ankit","Bohra","Xyz"}; 

Aber man kann dies nur in derselben Anweisung tun, wenn Sie deklariere es

+0

Nicht so, ich wollte wissen, warum wir diese geschweifte Klammerinitialisierung nach der Deklaration eines Arrays nicht machen können. –

+2

Weil die Sprache leider so definiert ist. – texasbruce

2

Es ist einfach keine gültige Java-Syntax. Sie können

names = new String[] {"Ankit","Bohra","Xyz"}; 
6

Erstes tun, ist dies nichts mit String zu tun hat bekam, ist es über Arrays .. und das auch speziell über deklarative Initialisierung von Arrays.

Wie hier in fast jeder Antwort von allen diskutierten sie, können sie, während deklarieren eine Variable, zu verwenden:

String names[] = {"x","y","z"}; 

jedoch Erklärung Post, wollen, wenn Sie eine Instanz eines Array zuweisen:

names = new String[] {"a","b","c"}; 

AFAIK, die Deklarationssyntax ist nur ein syntaktischer Zucker und es ist nicht mehr anwendbar, wenn assign Werte an Variablen übergeben, da bei der Zuweisung von Werten eine Instanz ordnungsgemäß erstellt werden muss.

Allerdings, wenn Sie uns fragen, warum es so ist? Nun ... viel Glück, eine Antwort darauf zu bekommen. Es sei denn, jemand aus dem Java-Komitee antwortet darauf, oder es gibt eine explizite Dokumentation, die den besagten syntaktischen Zucker zitiert.