IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

[Java] Post-déclaration vs. plusieurs déclarations successives


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 51
    Par défaut [Java] Post-déclaration vs. plusieurs déclarations successives
    Edit : Pardon je n'ai pas vu que j'étais pas dans Java... Mais enfaite cela m'intéresse également s'il y a une différence avec le C(++) et C#...

    Bonsoir,

    J'aurais une question qui me taraude depuis un certain temps :

    Si j'ai une boucle en java qui s'exécute n fois, avec n de grande taille. J'ai à ma disposition une ArrayList de taille n, et je veux effectuer un traitement sur chaque valeur contenue dans ma liste.

    Quel est la méthode la moins gourmande / la plus rapide entre ces deux méthode :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void traitement(ArrayList<Integer> liste) {
        Integer tmp;
        for (int i = 0; i < liste.size(); i++) {
            tmp = liste.get(i);
            //Traitement sur temp
        }
    }

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void traitement(ArrayList<Integer> liste) {
        for (int i = 0; i < liste.size(); i++) {
            Integer tmp = liste.get(i);
            //Traitement sur temp
        }
    }

    La différence est la déclaration de tmp avant ou pendant la boucle.

    Pour ma part j'aurais pensé que la première solution serait la meilleure, mais j'ai vu à beaucoup d'endroit que les gens déclarent leurs variables dans la boucle.

    D'où ma question : y a-t-il une différence au final ? Et avec un objet plus complexe ?

    Merci !

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    bonjour,

    Dans le premier cas, tu crees un unique objet tmp de type Integer, que tu reutilises a chaque passage.
    Dans le second cas, a chaque passage de boucle, tu crees un objet de type Integer, qui n'est plus atteignable par la suite, et qui sera donc garbage-collecte.

    Le meme comportement existe dans tous les langages, a ceci pres que si tu alloues explicitement ton objet dans ta boucle (par exemple avec new en C++), tu dois le desallouer explicitement aussi.

    Certains compilateurs sont capables d'analyser ce comportement, et de generer le meme code dans les deux cas, mais je ne te conseille pas de compter la dessus.

    Ce qui est le plus efficace : le premier

    Pourquoi les gens ecrivent le second cas : car beaucoup de formation n'enseignent pas, ou plus, la gestion de la memoire et des optimisations de code, et que le resultat de l'execution est correct dans les deux cas.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Citation Envoyé par As2piK Voir le message
    Quel est la méthode la moins gourmande / la plus rapide entre ces deux méthode :
    En java, le même byte code est produit. Pour t'en assurer tu peux décompiler les classes produites dans les deux cas.

    Je te conseille donc la deuxième forme, qui:
    • adopte la bonne pratique de déclarer les variables avec une portée minimale,
    • prévient de se heurter à des null pointer à cause de variables non initialisées,
    • simplifie le travail de refactoring en minimisant le contexte englobant à son minium.

Discussions similaires

  1. [XL-2003] Plusieurs déclarations Worksheet_Change
    Par Wilfried.G dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2014, 14h48
  2. déclaration sur plusieurs lignes
    Par nymus7 dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2010, 13h37
  3. POST à partir de plusieurs Edits
    Par andreditdd dans le forum Bases de données
    Réponses: 12
    Dernier message: 06/12/2007, 10h59
  4. Réponses: 6
    Dernier message: 12/05/2007, 00h31
  5. Text.Pos pour plusieurs positions successives
    Par nbutin dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/09/2006, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo