Wstęp: to pytanie ma zostało zadane here, ale zastanawiam się konkretnie nad jego szczególnym znaczeniem.Jeśli jawnie inicjujesz tablicę obiektów w Javie, to czy "nowy obiekt []" różni się od tego, że jej nie zawiera?
Przeczytam przez Myślenie w Javie, 3rd ed. Revision 4.0 i Eckel pokazuje ten fragment w rozdziale 4, Inicjowanie i Oczyszczanie:
public class ArrayInit
{
public static void main(String[] args)
{
Integer[] a =
{
new Integer(1),
new Integer(2),
new Integer(3),
};
Integer[] b = new Integer[]
{
new Integer(1),
new Integer(2),
new Integer(3),
};
}
}
i stwierdza, co następuje:
Pierwsza forma jest przydatna w czasach, ale to jest bardziej ograniczony od rozmiar tablicy jest określany w czasie kompilacji.
Druga forma zapewnia wygodną składnię do tworzenia i wywoływania metod, które mogą dać ten sam efekt co listy zmiennych zmiennych C (znane jako "varargs" w C). Mogą to być nieznane ilości argumentów oraz nieznane typy.
Nigdy nie wiedziałem, że są różne, jak opisuje Eckel. Według mnie są to zarówno tablice wielkości statycznej. Nie rozumiem, jak pierwszy jest bardziej "ograniczony" niż drugi.
O czym on mówi?
Nie mam pojęcia, o czym on mówi; są one w pełni równoważne. –
Albo zacytowałeś z kontekstu, albo on nie wie, o czym mówi. (Ustawiłbym kurs na 50:50.) –
Myślę, że to błąd w jego książce [Jon Skeet wie, co się dzieje] (http://stackoverflow.com/questions/4706814/array-initialization-differences -java) – gtgaxiola