Więc deklaruję i inicjalizuję tablicę int:
static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = UN;
}
Powiedz, że zrobię to zamiast tego ...
int[] arr = new int[5];
System.out.println(arr[0]);
... 0
wydrukuje do standardu. Jeśli to zrobię:
static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
... true
wydrukuje do standardu. Jak więc Java domyślnie inicjuje moją tablicę? Czy można bezpiecznie założyć, że domyślna inicjalizacja polega na ustawianiu indeksów tablicy, 0
co oznaczałoby, że nie muszę przechodzić przez pętlę i inicjować jej?
Dzięki.
java
arrays
initialization
Hristo
źródło
źródło
Odpowiedzi:
Wszystko w programie Java, które nie zostało wyraźnie ustawione na coś przez programistę, jest inicjowane do wartości zerowej.
null
.0
.0.0
false
.'\u0000'
(którego odpowiednikiem dziesiętnym jest 0).Kiedy tworzysz tablicę czegoś, wszystkie wpisy również są zerowane. Więc twoja tablica zawiera pięć zer zaraz po jej utworzeniu przez
new
.Uwaga (na podstawie komentarzy): Wirtualna maszyna Java nie musi zerować pamięci bazowej podczas przydzielania zmiennych lokalnych (w razie potrzeby umożliwia to wydajne operacje na stosie), aby uniknąć wartości losowych, specyfikacja języka Java wymaga zainicjowania zmiennych lokalnych.
źródło
Ze specyfikacji języka Java :
źródło
null
.JLS wyraźnie mówi
Inicjator tablicy tworzy tablicę i dostarcza wartości początkowe dla wszystkich jej składników.
i jest to niezależne od tego, czy tablica jest zmienną instancji, czy zmienną lokalną lub zmienną klasy.
Wartości domyślne dla typów pierwotnych: dokumentacja
W przypadku obiektów wartości domyślne to
null
.źródło
Według Javy
źródło
Thorbjørn Ravn Andersen odpowiedział w przypadku większości typów danych. Ponieważ toczyła się gorąca dyskusja na temat tablicy,
Cytowanie ze specyfikacji jls http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 „składnik tablicy jest inicjowany z wartością domyślną podczas tworzenia”
Myślę, że niezależnie od tego, czy tablica jest lokalna, czy zmienna instancji lub klasy, będzie miała wartości domyślne
źródło
Każda klasa w Javie ma konstruktor (konstruktor to metoda wywoływana podczas tworzenia nowego obiektu, która inicjalizuje pola zmiennych klasy). Dlatego podczas tworzenia instancji klasy wywoływana jest metoda konstruktora podczas tworzenia obiektu, a wszystkie wartości danych są inicjowane w tym czasie.
Dla obiektu typu tablica integer wszystkie wartości w tablicy są inicjalizowane na 0 (zero) w metodzie konstruktora. Podobnie dla obiektu tablicy boolowskiej, wszystkie wartości są inicjalizowane na false.
Tak więc Java inicjuje tablicę, uruchamiając jej metodę konstruktora podczas tworzenia obiektu
źródło
Java twierdzi, że domyślna długość tablicy JAVA w momencie inicjalizacji będzie wynosić 10.
Ale
size()
metoda zwraca liczbę wstawionych elementów do tablicy, a ponieważ w momencie inicjalizacji, jeśli nie wstawiłeś żadnego elementu do tablicy, zwróci zero.źródło