J'essaie de comprendre la configuration de la matrice en Java. Pourquoi devez-vous initialiser l'espace pour chaque objet dans la matrice, après avoir créé le tableau. Comment est-il stocké dans la mémoire comme ceci: ou comme ceci: p> En d'autres termes, qu'est-ce qui est réellement fait en mémoire . Est-ce que array [0] = nouvelle classe () code> vient de renvoyer une référence à un emplacement réservé en mémoire et de la classification
[] = nouvelle classe [10] code> Déclaration Créer quelque chose Dans le sens des 10 pointeurs, qui sont ensuite assignés par les nouvelles déclarations? P> P>
3 Réponses :
Tableaux dans Java Store L'une des deux choses: soit des valeurs primitives ( donc, Incidemment, c'est exactement la même manière que les champs, les variables et les paramètres de méthode / constructeur fonctionnent: ils ne stockent pas uniquement les valeurs primitives ou les références. P> int code>,
char code>, ...) ou des références (a.k.a pointeurs). P>
neuf entier [10] code> crée de l'espace pour 10
Integer code> Références uniquement. Il fait pas fort> créer 10
Objets d'integer code> (ou même de l'espace libre pour 10
integer code> objets). P>
Y a-t-il une différence de mémoire entre la manière dont les matrices de primitives sont stockées que des tableaux d'objets
Comme il n'y a pas de références à des valeurs primitives, les valeurs elles-mêmes sont stockées dans la matrice au lieu de références.
Qu'en est-il de la longueur? Les tableaux en Java connaissent leur longueur. N'est-ce pas stocké quelque part? Ou est-ce une chose de compilation seule?
Les tableaux sont un espace continu de mémoire, ils ressemblent donc à plus de votre premier croquis: P>
[référence d'objet] [référence-référence] code> p>
Array [0] = Nouvelle classe () code> stockera dans
Array [0] code> une référence au nouvel objet créé. p>
classe [] tableau = nouvelle classe [10] code> créera un tableau de dix emplacements vides (ou des références de dix nuls). P>
En fait, il est similaire au deuxième exemple de la question de l'OP.
Si vous connaissez C / C ++ est: p> Alors, lorsque vous faites: p> Vous réservez un tableau de 5 références à la personne forte>. Ensuite, vous devrez créer chaque personne réelle et affecter chaque référence à un endroit dans la matrice. P> EDIT: STROND> La version (presque) C / C ++ du code précédent p> et vous pouvez faire p>
Donc, c'est presque comme si vous créez une personne * p [] Array, puis en attribuez-en une à une à une à p [0] tout au long de la [longueur-1]?
Oui. C'est comme ça. Dans mon exemple de code PS est le tableau. C'est aussi une référence (située dans la pile) à la structure de la matrice (située dans le tas). La structure de la matrice est celle qui tiendra les références aux objets de cinq personnes. Je vais ajouter une traduction C / C ++ :)
Dupliqué possible de Le tableau Java est stocké dans la pile ou le tas?