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

Langage Java Discussion :

[String]Chaine vide et méthode intern()


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut [String]Chaine vide et méthode intern()
    Bonjour,

    J'ai deux questions que je me pose depuis longtemps :

    - Dans un programme Java est-il interressant/utile de créer une constante de type EMPTY_STRING pour toutes les utilisations d'une chaine vide.
    Je vois ça dans beaucoup de codes source. Est ce que ca améliore les performances en économisant les allocations ? Est ce pour rendre le code plus lisible (très discutable dans ce cas) ?

    - Dans quel(s) cas peut-il être judicieux d'utiliser la méthode intern() de la classe String ?

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Salut,

    Je pense que c'est fait pour une question de lisibilité et éventuellement de design si un jour le choix n'est plus d'utiliser une chaîne vide mais une chaîne particulière.

    Quand a savoir quand il est judicieux d'utiliser la méthode intern() de la classe String .. en 15 ans de Java je n'en ai jamais eu besoin.. de là a en tirer des conclusions

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  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,

    Citation Envoyé par Guybrush Voir le message
    Est ce que ca améliore les performances en économisant les allocations ?
    Tout ceci est fait dans les deux cas ! Les constantes sont remplacées par leurs valeurs à la compilation. Donc le résultat final est exactement le même.

    Citation Envoyé par Guybrush Voir le message
    Est ce pour rendre le code plus lisible (très discutable dans ce cas) ?
    Oui... même si comme tu le dit c'est très discutable dans ce cas précis...

    Citation Envoyé par Guybrush Voir le message
    - Dans quel(s) cas peut-il être judicieux d'utiliser la méthode intern() de la classe String ?
    En fait assez rarement... Déjà parce que toutes les constantes sont automatiquement "internées".


    Il pourrait y avoir un intérêt par exemple si on récupère ces chaines depuis une fichier que l'on manipule via les méthodes de la classe String.
    En effet si on lit un fichier de 5000 lignes contenant souvent les mêmes chaines, on va se retrouver avec 5000 objets String en mémoire même s'il n'y a que 4 ou 5 valeurs différentes. Dans ce cas un intern() pourrait s'avérer utile car on diminuera le nombre d'instance...

    Mais bon il y a d'autres solutions :
    • Utiliser un pool perso (ce qui sera plus contrôlable).
    • Utiliser des objets (par exemple une enum pour chaque valeur possible).



    Par contre il faut éviter d'interner un peu tout et n'importe quoi, car il me semble que les strings internées ne peuvent pas être libérable...


    a++

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Par défaut
    merci pour vos explications très claires.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Remplacer les chaines vides (ZLS – Zero Lenght String) par des Null.
    Par Bonero dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/03/2012, 17h34
  2. Réponses: 2
    Dernier message: 21/11/2008, 11h08
  3. SQL String // Chaine de caractères trop longue
    Par Didier100 dans le forum Bases de données
    Réponses: 7
    Dernier message: 17/10/2005, 21h57
  4. copie de string donne une chaine vide
    Par zmatz dans le forum SL & STL
    Réponses: 5
    Dernier message: 15/10/2005, 15h31
  5. [BDD] renvoyer une chaine vide au lieu de null
    Par cmoulin dans le forum JDBC
    Réponses: 6
    Dernier message: 06/05/2004, 11h38

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