Czy null coś zajmuje?

0

Załóżmy, że mam tablicę:

String[] array = new String[100]

w tym momencie tablica przechowuje 100 nullów. Czy te nulle coś zajmują?

0

Jest moze w javie funkcja sizeof? Bo w c++ jest, to tu tez powinno. Choć nie znam javy.
http://www.glenmccl.com/tip_038.htm
Tam jest... to wiec powinno byc

0

Według tego tekstu null powinien nic nie zajmować. Ale coś trudno mi w to uwierzyć... Czyli tablica 100 nullów zajmuje tyle samo co tablica 1 nulla?

0

Tablica 100 nulli zajmuje tyle samo co tablica 100 wieklich obiektow - tablice to obiekt ktyry ma w sobie wskazniki na inne obiekty, a jak nie ma wskaznika to i tak miejsce na niego jest zarezerwowane. zakladajac ze wskaznik ma powiedzmy 4 bajty, tablica 100 nulli ma 400 bajtow. Jesli teraz do tej tablicy wstawimy 100 obiektow, to tablica i tak tylko trzyma wskazniki i nadal ma te 400 bajtow, jednakze na stercie jest 100 nowych elementow, ktore zajmuja swoja porcje w pamieci.

0

Ja odpowiem tak: tablica 100 stringów to tablica 100 adresów na zaalokowane na stercie poszczególne stringi. Ponieważ pod zerowym adresem sterty znajduje się blok opisu sterty i nie może istnieć tam zaalokowany żaden obiekt użytkownika, zapisanie w tablicy adresu o wartości 0 (NULL) oznacza brak obiektu. String nie zajmuje oczywiście nic, ale adres w systemie 32 bitowym jest 32 bitowy (zatem mamy 4 bajty o wartości 0).

Tablica 100 niezaalokowanych stringów zajmuje w systemie 32 bitowym 100*4 = 400 bajtów, czyli tyle samo, co tablica 100 zaalokowanych stringów. Jednak w drugim przypadku jeszcze same stringi zajmują pamięć.

0

Szczawik dobrze pisze. A co do sizeof to jego istnienie w javie jest zbedne. Byl on uzywany w c poniewaz na roznych platformach rozne prymitywne zmienne zajmowaly rozna ilosc pamieci. Poniewaz w javie zmienna to w kazdym systemie tyle samo, mozna po prostu wziasc ksiazke i sprawdzic , ile zajmuje int ,ile Integer a ile pusta referencja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1