2011-01-16 18 views
10

Jaka jest różnica między tymi dwoma następującymi metodami inicjalizacji tablicy:Array różnice inicjalizacji java

  1. Object[] oArr = new Object[] {new Object(), new Object()};
  2. Object[] oArr = {new Object(), new Object()};

Jest to związane z alokacji sterty/stosu?

Dzięki!

+8

nie ma żadnej różnicy. –

+0

"Przedwczesna optymalizacja jest źródłem wszelkiego zła" – gulbrandr

+2

@gulbrandr, relevance? – davin

Odpowiedz

18

Brak w ogóle - to tylko różne sposoby wyrażania tego samego.

Drugi formularz jest dostępny tylko w deklaracji zmiennej. Na przykład, nie można napisać:

foo.someMethod({x, y}); 

ale można napisać:

foo.someMethod(new SomeType[] { x, y }); 

Odpowiedni bit specyfikacji języka Java jest sekcja 10.6 - Array Initializers:

inicjator tablica może być określone w deklaracji, lub jako część wyrażenia tworzenia tablicy (§15.10), tworząc tablicę i dostarczając trochę init wartości:

+0

@gasan: Tak, to część wyrażenia tworzenia tablicy ... Nie widzę, jak to działa wbrew mojej odpowiedzi. –

2

Absolutnie identyczne. Drugi jest skrótem dla pierwszego (tylko wtedy, gdy, jak tutaj, jest wykonywany jako część deklaracji zmiennej

1

W Javie wszystkie obiekty żyją w stercie, ponieważ tablice są obiektami w Javie, które znajdują się w stosie.

dla tych dwóch nie ma różnicy w rezultacie, będziesz dostał dwa obiekty tablicowe z tych samych elementów.

jednak czasami można napotkać pewne sytuacje, w których nie można ich użyć, na przykład don ' Jeśli znasz elementy tablicy, to utkniesz w tym formularzu:

Object [] array=new Object[size];

0

Jest jeszcze mała i chwytliwa różnica!

Można zrobić

int[] arr; 
arr= {1,2,3}; // Illegal 

Ale można bardzo dobrze

int[] arr; 
arr = new [] {1,2,3} //Legal 

Także jeśli jesteś zainicjować później to nie można zrobić

int arr; 
arr = new [] {1,2,3} //Illegal