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

avec Java Discussion :

String et StringBuffer vitesse et fonctionnement


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 382
    Par défaut String et StringBuffer vitesse et fonctionnement
    Bonjour,

    Je viens de regarder les différences de vitesse entre les deux entre les deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            StringBuffer buffer = new StringBuffer("");
            for(int i=0;i<10000;i++)
                buffer.append("a");
     
            String  buffer2 = new String();
            for(int i=0;i<10000;i++)
                buffer2 += "a";
    Et j'obtient des résultat assez surprenant. 462ms pour la partie String et 50ms pour une StringBuffer. La différence est-elle normale ?

    J'aimerais donc savoir comment fonction String.
    D'après ce que j'ai vue. Quand on utilise un type String. si on fait buffer2 += "a", il y a un appel a StringBuilder pour créer la chaine puis un appel a toString pour récupérer celle-ci ?

    Merci de m'aider à comprendre.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    Dans le détail, je ne sais pas, mais je pense qu'en manipulant des String, il y a des instanciations d'objets lorsque tu fais par exemple Et dans le cas du StringBuffer, il y a simplement appel à une méthode d'un objet déjà existant.

    Et chacun sait bien qu'une instanciation ça consomme beaucoup de ressources.

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    String n'est pas fait pour être modifié : c'est un objet immuable dont la valeur n'est jamais modifié.

    En fait lorsque tu utilises une méthode qui semble modifier une String, tu obtiens en réalité une nouvelle String.


    StringBuffer à l'inverse est conçu spécialement pour représenter une String modifiable, et c'est en fait ce qui est utilisé par l'opérateur +. Lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            String  buffer2 = new String();
            for(int i=0;i<10000;i++)
                buffer2 += "a";
    En réalité cela revient à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            String  buffer2 = new String();
            for(int i=0;i<10000;i++)
                buffer2 = new StringBuffer(buffer2).append("a").toString();
    A chaque tour tu crée un nouvel objet StringBuffer, que tu modifies avant de créer une nouvelle copie en String... Bref : deux objets temporaires à chaque itération ce qui devient vite assez coûteux...


    Bref lorsque tu dois faire plusieurs modifications sur une String (et en particulier des concaténations), il faut passer par des StringBuffer !



    Quand aux StringBuilder, apparu avec Java 5, il ne s'agit ni plus ni moins que du remplaçant de StringBuffer, qui sont simplement mono-thréadé et donc potentiellement plus véloce (même si la différence n'est pas forcément sensible).


    a++

Discussions similaires

  1. Conversion d'un String hex en int ne fonctionne pas
    Par Shirase_Akira dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2012, 17h49
  2. String vs StringBuffer
    Par totoche dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2010, 11h32
  3. String et StringBuffer
    Par ginkas31 dans le forum Langage
    Réponses: 5
    Dernier message: 31/03/2008, 12h21
  4. Passage d'argument par référence (String et StringBuffer)
    Par dword2add dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 18/03/2008, 16h50
  5. Réponses: 2
    Dernier message: 12/05/2006, 23h01

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