Déclaration de variables dans une boucle

bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004 - 11 mai 2004 à 16:34
bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004 - 12 juil. 2004 à 09:55
Bonjour,

j'aurais juste une question au sujet d'un cas de déclaration de variables en Java :
y a-t-il une grande différence entre :

while(...)
{
int i=...;
...
}

et

int i;
while(...)
{
i=...;
...
}

Est ce que le fait de déclarer la variable en dehors de la boucle permet de gagner en temps ou autre ? Ou cela ne change rien...
Merci d'avance.

Julien.

bewyde or die

12 réponses

cs_hassoune Messages postés 5 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 11 mai 2004
11 mai 2004 à 16:52
vous devez declarer la variable avant de l'utiliser..
0
bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004
11 mai 2004 à 17:02
Oui ca je suis au courrant merci. Premierement, les deux codes sont tout à fait possibles. Rien n'interdit d'implémenter l'un d'eux. Mais ma question appelle une réponse plus en profondeur...Notamment par rapport au travail du Garbage Collector et si il y a une réelle différence pour la compilation.
Si possible, je souhaiterais avoir une réponse assez précise, merci.

bewyde or die
0
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
11 mai 2004 à 17:15
kaloway

je ne sais pas, mais j ai une information qui pourrait t interessr.

2 variables portant le meme nom, l une declarée hors de la boucle est visible de la classe et l autre dans la boucle while n est visible que de la boucle.
0
bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004
12 mai 2004 à 09:33
Merci bien kaloway.
Maintenant reste a savoir si quelqu'un peut repondre a ma question...La patience est en moi.

bewyde or die
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
12 mai 2004 à 11:03
la reponse est:
les deux sont valables, mais ca tu le sais...
la difference est un pb d'allocation,
si tu le fais en dehors de la boucle, tu alloues une fois une variable,
si tu le fais dans la boucle, tu alloues n fois un variable...

la difference est clair je pense... et ta patience est recompensee...

>:) [font = Comic Sans MS] dams/font >:)
"en dansant la javanaise ..."
0
bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004
12 mai 2004 à 15:15
j'apprecie enormément ton aide dmaillet malgré son inutilité...
Je ne suis pas un pro en java mais pas un debutant non plus et c'est me prendre un peu comme un débutant de me dire que par une méthode j'alloue en dehors de la boucle une variable et dans l'autre j'alloue plusieurs fois une variable. Au vue de ta réponse, tu n'a ni compris ma question, ni l'air d'être tres calé en java. Enfin bon, je te remercie quand meme de ta participation.
Si tu veux un début de réponse, il n'y a aucune différence au niveau du code produit par les deux méthodes. J'ai du demandé à un maitre de conférence de mon université qui m'a répondu cela. Ce qui confirme que tu ne connaissait pas la réponse en disant "la différence est clair je pense...".
J'avais pourtant précisé qu'il s'agissait d'un cas précis et que la réponse n'était pas forcément évidente.

Ce que tu dois savoir c'est qu'avec java, le compilateur ne garde pas en mémoire les variables pendant toute la durée de leur portée, mais uniquement quand elles sont vraiment utilisées.
Ne pense pas que le compilateur "fait" ce que tu crois qu'il fait seulement en regardant le code. Il travaille un peu plus derriere.

Si quelqu'un a d'autres explications, j'aimerais bien les avoir merci.

bewyde or die
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
12 mai 2004 à 15:41
merci de me prendre moi aussi pour un imbecile
un partout disons...
pour etre plus concernant ta question de depart, tout depend de ce que tu fais dans ta boucle, et donc de la pile ou stack si tu prefere que tu generes...
lconcernat la memoire, le contexte actuel est en effet seulement garde en memoire...
donc ceci pour te dire que ma reponse n'etait pas stupide (merci pour moi)
car dans le contexte de ta boucle, tu vas qd meme a chaque tour reallouer une variable, meme si ceci ne prend pas beaucoup de temps.
D'ailleurs, tu pourras demander a d'autres programmeurs java,
il est plutot conseille d'utiliser ta premiere solution... (allocation en dehors de la boucle).
Qt au GarbageCollector, a chaque fin de boucle, les variables du contexte de ta boucle sont candidats au garbage, mais un garbage n'est pas effectue a chaque fin de boucle, sauf si tu le force.
Et puis precise un peu ta question si tu veux des reponses precises (si des gens ici l'ont, ce qui n'est pas sur a 100%) et que l'on ne te prenne pas pour un debutant... comme tu dis...
---------------------------------------------
>:) dams >:)
...en dansant la javanaise ...
---------------------------------------------
0
bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004
12 mai 2004 à 16:14
ah bah voila une reponse precise.
Merci je prefere une explication comme cela, on comprend mieux.
Deux dernieres choses :
- o bout d'un moment c'est assez soulant d'avoir des reponses qui servent a rien c'est pour ca que je me suis peut etre emporté (faut dire qu'elles etaient un peu niaises ces reponses, oui toi aussi dmaillet, relit bien la tienne tu me comprendras)...et si c'est parce que je n'ai pas ete assez precis dans ma question (mouai), c'est la seconde choses...
- ...je m'en excuse. Ce qui clot le débat (enfin...).

bewyde or die
0
cs_tds Messages postés 351 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 9 décembre 2004
14 mai 2004 à 08:58
bewyde ==> die

Les réponses étaient pourtant claires...
Peut-être est-ce l'esprit de certains qui s'embrouillent...

B@ron {EU.BELGIUM}
0
PaulMaj Messages postés 1 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 11 juillet 2004
11 juil. 2004 à 15:58
Question intéressante, c'est vrai que l'on est tenté d'utiliser ce "raccourci", pour ma part je l'ai toujours fait ... même dans la profession

autre question, alors donc c'est pas mieux de faire ça ?

for (int i=0;i<10;i++){
System.out.println(i);
}

vaudrai - il mieux faire ça ?

int i=0;

for(i=0;i<10;i++){
System.out.println(i);
}
0
cs_tds Messages postés 351 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 9 décembre 2004
12 juil. 2004 à 07:29
C'est exactement le même chose seule la portée de ta variable est différente.
En gros pour les boucles locales, il vaut mieux utiliser:

for (int cpt=0; cpt < CONSTANTE; cpt++){
... ;
}

B@ron {EU.BELGIUM}
0
bewyder Messages postés 11 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 juillet 2004
12 juil. 2004 à 09:55
O moins ma question netai pas si ininteressante que ca...
dautre part, je ne voi pas pk tu me di "die" B@ron, puisque au vu de la PREMIERE reponse de dmaillet, ce que tu di ne vas pas dans son sens : tu dis bien "C'est exactement le même chose seule la portée de ta variable est différente", alors que lui disai quil y avai une difference dallocation. Moi jetai de ton avis, c t donc normal que je ne soi pa satisafi de cette reponse. Je voulai juste de plus amples explications. Et ta reponse

"bewyde ==> die

Les réponses étaient pourtant claires...
Peut-être est-ce l'esprit de certains qui s'embrouillent..."

navai pas lieu detre, surtt si c contre moi. Si la premiere reponse etai si clair que ca, je ne voi pa pk tu es intervenu en contredisan...

Encore faudrait il savoir ce qe signifie "bewyde" ce que tu ne trouveras pas dans un dico. il fau pr ca, connaitre mon origine, ce dont je nai pa envi de parler.

bewyde or die
0
Rejoignez-nous