2013-07-07 15 views
70

Gdybym zadeklarować String tablicy:String inicjalizacji tablicy w Javie

String names[] = new String[3]; 

Więc dlaczego nie możemy przypisać wartości do tablicy zadeklarowanej powyżej tak:

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

"stałe tablicowe mogą być używane tylko w inicjalizatorach"; Czy to nie wystarczający powód? Chyba, że ​​szukasz "intencji legislacyjnej"! – zEro

Odpowiedz

126

można wykonać następujące czynności podczas deklaracji:

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

A jeśli chcesz to zrobić gdzieś po deklaracji:

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

Jak zapytałem, dlaczego nie możemy go zainicjować za pomocą nawiasów klamrowych po zadeklarowaniu jako tablica 3. –

+0

@AnkitBohra. To właśnie robi drugi fragment. –

+10

@AnkitBohra ponieważ '{" x "," y "," z "}' nie jest instancją tablicy. Natomiast 'nowy ciąg [] {" x "," y "," z "}' jest. – zEro

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

jest inicjator i stosowane wyłącznie przy konstruowaniu lub tworzenia nowy tablicy obiektu. Nie można go użyć do ustawienia w tablicy zestawu. Można go używać gdy zadeklarowana jako:

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

Można również użyć:

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

jak to robi różnicę, kiedy musimy użyć - ** String [] names = {" Ankit "," Bohra "," Xyz "}; ** i kiedy ** names = new String [] {" Ankit "," Bohra "," Xyz "}; **, każdy przypadek użycia, w którym pasuje. z góry dzięki @hexafraction. –

+1

@Avenger Nic. Obaj robią to samo, jeśli dobrze pamiętam. – hexafraction

2

To znaczy, jak:

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

Ale można to zrobić tylko w tym samym oświadczeniu, kiedy zadeklaruj to

+0

Nie tak, chciałem wiedzieć, dlaczego nie możemy wykonać tej inicjalizacji nawiasów klamrowych po zadeklarowaniu jakiejkolwiek tablicy. –

+2

Ponieważ język jest zdefiniowany w ten sposób niestety. – texasbruce

2

To nie jest poprawna składnia Java. Można zrobić

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

Najpierw, to nie ma nic wspólnego z String, to jest o tablicach .. i że zbyt konkretnie o deklaratywnej inicjalizacji tablic.

Jak wspomniano przez wszystkich niemal każdą odpowiedź tutaj, można, deklarując zmienną, przeznaczenie:

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

Jednak deklaracja poczta, jeśli chcesz przypisać instancję tablicy:

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

AFAIK The deklaracja składnia tylko cukier syntaktyczny i to nie ma zastosowania, gdy już przypisać wartości do zmiennych, ponieważ przy przypisaniu wartości trzeba poprawnie utworzyć instancję.

Jednakże, jeśli pytasz nas, dlaczego tak jest? Cóż ... powodzenia uzyskanie odpowiedzi na to. Chyba że ktoś z komitetu Javy odpowie na to pytanie lub istnieje wyraźna dokumentacja cytująca wspomniany cukier składniowy .