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 :

question literal strings


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Par défaut question literal strings
    Bonjour à tous,

    je suis entrain de préparer à la certif java 1.5.

    j'ai la question stp,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    11. public String makinStrings() {
    12. String s = “Fred”;
    13. s = s + “47”;
    14. s = s.substring(2, 5);
    15. s = s.toUpperCase();
    16. return s.toString();
    17. }
    la réponse est :
    How many String objects will be created when this method is invoked?
    A. 1
    B. 2
    C. 3
    D. 4
    E. 5
    F. 6
    Answer: C


    vous pouvez m'expliquer pourquoi 3 ? merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    12: non, la String "fred" est stocké dans le code et existe dès la création de la classe et donc la réalisation des méthodes
    13: oui (stringbuilder + append + toString)
    14: oui, l'instance est séparée
    15: oui, nouvelle instance avec la substring
    16: non la javadoc dit que toString revoie this

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 584
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 584
    Par défaut
    Deuxième formulation, histoire de :

    12:"Fred" est une chaîne littérale. Une chaîne littérale est créée au chargement de la classe qui la définit. Voire avant, si une classe déjà chargée définissait la même.
    13: L'opérateur de concaténation + peut avoir deux comportements :
    - La concaténation de constantes, si les deux opérandes sont des constantes, la concaténation va être effectuée par le compilateur, et être traitée de la même manière qu'une chaîne littérale.
    - Le reste : si au moins une opérande n'est pas une constante, le compilateur ne peut pas s'en charger, la concaténation se fera à l'exécution. Dans ce cas-là, il y a toujours création d'une nouvelle String.

    Ici, "47" est une constante, mais s ne l'est pas (ce n'est pas une variable final, la question ne se pose pas). s + "47" n'est donc pas une expression constante, nous sommes donc dans le deuxième cas. Donc, création de String.

    14: La String issue de substring() n'est pas identique à s, il faut donc bien la créer pour l'obtenir !
    (On pourrait imaginer que substring() utilise le pool de String et évite de créer s'il peut l'éviter, mais ça coûte cher, pourquoi le ferait-il ? En pratique, il y a création de nouvelle String.)

    15: Même raisonnement que 14. (Pour rappel, s vaut "ed" avant, et "ED" après.)

    16: Bon, comme dit tchize_, la Javadoc est claire, String.toString() renvoie this. Pas de création de nouvelle String.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Par défaut
    Bonjour à tous,


    Merci bien pour vos réponses.

    Excellente journée

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    D'où l'intérêt pour des raisons de performances d'utiliser StringBuffer pour éviter la recréation à chaque modif.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    stringbuilder pas stringbuffer

Discussions similaires

  1. Question sur String[] split()
    Par k3nsou dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 24/04/2009, 10h05
  2. Quelques question sur string
    Par devatt dans le forum Débuter
    Réponses: 5
    Dernier message: 24/12/2008, 10h11
  3. question raw string
    Par polo42 dans le forum Général Python
    Réponses: 5
    Dernier message: 25/01/2008, 02h00
  4. Question sur String variable = new String( )
    Par beegees dans le forum Langage
    Réponses: 12
    Dernier message: 14/05/2007, 21h38
  5. Question simple string[] et string
    Par SrK dans le forum Langage
    Réponses: 10
    Dernier message: 14/04/2006, 15h41

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