Dlaczego nie możemy zrobić tablic w Javie tak:Tworzenie tablic w Java (C++ Style)
int marks[5];
i przypisać wartości po tej deklaracji?
Ktoś proszę wyjaśnić terminologię lub różnicę.
Dlaczego nie możemy zrobić tablic w Javie tak:Tworzenie tablic w Java (C++ Style)
int marks[5];
i przypisać wartości po tej deklaracji?
Ktoś proszę wyjaśnić terminologię lub różnicę.
Dzieje się tak, ponieważ w Javie nie ma tablic stosów. Oto odpowiednik Java:
int[] marks = new int[5];
Wygląda bardzo podobnie do przydzielania tablic o rozmiarach dynamicznych w C++. Oczywiście nie musisz się martwić, dzwoniąc pod numer delete[]
, ponieważ jest on zbierany.
+1, pokonaj mnie na [to] (http://ideone.com/hdYNT). –
Ponieważ tablice są Object
-s (dziedziczą z klasy Object
). Aby utworzyć obiekt, musisz użyć słowa kluczowego new
. (Większość czasu).
Myślę, że przyczyną słowa kluczowego new
jest oznaczenie, że zmienne są odniesieniami do dynamicznie przydzielanych wystąpień.
Okay ... Trochę tego teraz ... Dzięki – hk007
Ponieważ składnia jesteś powołując alokuje tablicę na stosie, a tablice są obiektami Java, Java i wszystkie obiekty są alokowane na stercie (modulo najnowsze optymalizacje JVM, ale te są ukryte).
I tak musi być w ten sposób w języku bez ręcznego zarządzania pamięcią, ponieważ pliki przydzielane na stosie znikają, gdy wywołanie wraca, prowadząc do zwisających wskaźników, a podstawową cechą Javy nie jest dopuszczenie takich rzeczy.
Oczywiście można argumentować, że Java powinna używać składni alokacji stosów do alokacji sterty, ale to by zmieszało z nikim, kto znał C - niedobrze.
+1 za podanie niejawnych optymalizacji JVM. – dasblinkenlight
W Java wielkość matrycy jest określona przez wyrażenie, że tworzy się, na przykład:
int[] marks = new int[5];
lub
int[] marks = {1,2,3,4,5};
Należy również zauważyć że chociaż składni int marks[]
jest dozwolone w Javie (Java ma kilka takich reguł dla zgodności z C++), to nie jest t zalecane, składnia int[] marks
jest bardziej idiomatyczna, a zatem preferowana.
Czy próbowałeś? Jakie są wyniki? –
Czy możesz uzupełnić swoje pytanie, wygląda na to, że pytasz "Dlaczego Java nie używa dokładnie tej samej składni co C++?" To prawdopodobnie tylko ja, pytanie może mieć więcej sensu dla ludzi, którzy znają C++ i Java niż tylko Javę. –
@Tichodroma: prawdopodobnie próbował, a wynikiem był "Błąd składni na tokenie" 5 ", usuń token". –