windux a écrit :
Je suis pas trop sûr, mais je pense que c'est un seul objet qui est géré en mémoire : le tableau d'objets : pour un tableau statique, connaissant sa taille et la taille du type d'objet, l'information est suffisante pour réserver de l'espace mémoire.
|
La taille du type d'objet n'a aucune importance, les objets ne sont pas directement dans le tableau (contrairement à un tableau de struct C), il ne stocke que des références vers les objets (ou — la valeur par défaut — null s'il n'y a aucun objet à l'index) (pour les arrays vers des objets, les arrays vers des valeurs genre int[] sont différents)
Ici il n'y a qu'un objet alloué en Java: le tableau même, tous les indices sont à null. C'est facile à voir avec un peu de logging:
Code :
Compte[] tab = new Compte[10];
|
sortie:
[null, null, null, null, null, null, null, null, null, null] |
(le Arrays.asList, c'est parce-que le toString d'un array est inutilisable, ça balance un truc genre [LCompte;@56e5b723, celui qu'une liste imprime une sorte d'array litéral avec les toString des membres — ou null si l'index est vide)
(edit: à partir de java 5, il y a Arrays.toString et Arrays.deepToString qui fonctionnent directement sur les arrays sans avoir besoin de passer par asList, mais les vieilles habitudes sont dures à perdre)
(Arrays.toString et Arrays.deepToString ont l'avantage de fonctionner correctement sur les arrays de value types, ce qui n'est pas le cas de asList)
Message édité par masklinn le 10-12-2012 à 13:14:36
---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?