2009-05-27 4 views
0
List list = new ArrayList(); 


String[] test = {"ram", "mohan", "anil", "mukesh", "mittal"}; 

for(int i =0; i < test.length; i++) 

{ 

    A a = new A(); 

    a.setName(test[i]); 

    list.add(a); 

} 

Comment JVM gère la création de l'objet a dans chaque boucle? Comment "liste" diffèrent entre différentes instances? Est-ce une bonne pratique de créer un objet à chaque itération. Si non, quelle est la meilleure solution pour ajouter un objet dans une liste.comment jvm gère la création d'objet à l'intérieur d'une boucle

+0

Une petite erreur de compilation se produira: Impossible d'instancier la liste de types. – guerda

Répondre

6

Dans votre exemple, un nouvel objet est créé à chaque itération de la boucle. La liste est en mesure de faire la différence entre eux parce qu'il ne se soucie pas que vous les appelez tous les « a » dans votre code, il garde la trace d'entre eux par la référence qui obtient réaffecté chaque fois que vous appelez

a = new A(); 

Chaque fois que une ligne de code est appelée, un nouvel objet est créé sur le tas et son adresse en mémoire est assignée à la référence a. C'est cette référence que la liste conserve un enregistrement, pas le nom de la variable.

Ceci est un moyen parfaitement fin et normal de remplir une liste (en dehors des erreurs de syntaxe que d'autres ont mentionnées, que je suppose que vous pouvez corriger lorsque vous essayez de compiler votre code).

2

Liste contient une référence à chaque instance d'un qui est créé. C'est bien de créer chaque objet à l'intérieur de la boucle (je suppose que vous voulez dire plutôt que de déclarer la variable 'a' en dehors de la boucle et de la ré-assigner à chaque itération).

+0

Oui. vous avez raison. Un de mes amis m'a dit que ce n'est pas une bonne pratique de créer autant d'instances. Cela peut diminuer les performances de l'application. – Shashi

+2

@Shashi Bhushan: À moins que vous ayez besoin de toutes les instances, bien sûr, auquel cas il est logique de les créer. :) – Eddie

+0

@shashi Cependant, créer plusieurs instances est parfaitement correct. – jrharshath

1

Est-ce une bonne pratique de créer un nouvel objet à chaque itération? Un de mes amis m'a dit que ce n'est pas une bonne pratique de créer autant d'instances.

Si vous avez besoin d'instances individuelles différentes, vous devez les créer. Étant donné que votre liste a besoin de cinq objets avec des noms différents (RAM, MOHAN, ANIL, etc.), vous avez besoin d'un nouvel objet pour chaque itération de la boucle. Comment allez-vous stocker les cinq noms? En ce qui concerne la déclaration de la variable a en dehors de la boucle, je ne pense pas que cela fasse une différence sur le plan des performances et réduise également la lisibilité.

A a; // dont do this 
for(int i =0; i < test.length; i++){ 
    a = new A(); 
    a.setName(test[i]); 
    list.add(a); 
} 

Vous pourriez être intéressé par le for-each boucle

for(String name: test){ 
    A a = new A(); 
    a.setName(name); 
    list.add(a); 
} 
1

Si ma compréhension de la machine virtuelle Java est correcte, le code affiché aura pas de différence de performance par rapport à

for (String name : test) 
{ 
    list.add(new A(name)); 
} 

(en supposant, bien sûr, que le constructeur A (String s) est une autre façon de créer une nouvelle instance avec un nom spécifique)

Questions connexes