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
---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody