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 :

[Examen OCA] égalité des String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut [Examen OCA] égalité des String
    Bonjour,
    j'ai ce petite comparaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String x="Hello World";
    String z=" Hello World".trim();
    System.out.println(x==z);//false
    je ne viens pas de comprendre pourquoi false car normallement après que j'applique la fonction trim() l'espace va etre supprimé et par conséquent les deux chaines vont pointer sur le meme référence
    et c'est l'explication qu'ils ont mentionné au niveau de livre "In this example,we don't have two of the same String literal.Although x and z happen to evaluate to the same string,one is computed at runtime.Since it isn't the same at compile-time, a new String object is created."

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    https://docs.oracle.com/javase/8/doc...ng.html#trim--

    Trim supprime les espaces au début et à la fin d'une chaine, contrairement à ce que tu penses.

    Sans le Trim, tu aurais eu égalité. Une seule chaine serait créée dans le pool.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut
    ce que je ne viens pas a comprendre c'est est ce que la variable z va être initialisé par " Hello World" ou applique la fonction trim() ensuite affecte le résultat au variable z?!!

  4. #4
    Membre Expert Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 447
    Par défaut
    Citation Envoyé par emna1987 Voir le message
    Bonjour,
    j'ai ce petite comparaison
    String x="Hello World";
    String z=" Hello World".trim();
    System.out.println(x==z);//false
    je ne viens pas de comprendre pourquoi false car normallement après que j'applique la fonction trim() l'espace va etre supprimé
    C'est exact.

    Citation Envoyé par emna1987 Voir le message
    et par conséquent les deux chaines vont pointer sur le meme référence
    Non, la fonction trim doit effectuer une transformation, et vu que String est une classe immuable, elle doit alors créer et retourner une nouvelle instance, donc avec une référence différente.
    Les 2 String vont effectivement avoir le même contenu (equals retournera true), mais elles seront 2 objets distincts en mémoire.

    Pour que les 2 variables partagent la même référence mémoire au sein du pool, il est nécessaire d'appeler la méthode intern, qui fournira la référence de l'instance contenue dans le pool et donc de l'assigner à la variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String z=" Hello World".trim().intern();

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Je n'ai pas vu l'espace de début de deuxième chaine, désolé pour mon message.

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut
    oui je sais que String est immutable mais ce que me gène est ce que String z=" Hello World".trim(); c'est est ce que " Hello World".trim() va être exécuté et l'espace est supprimé et ensuite va etre affecté a la variable z ou " Hello World" est affecté et par la suite trim() est appliqué et comme ça un noveau objet va etre crée vue que string est immuable

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    ?????

    La variable z est affectée une valeur après que l'on ait fini de calculer cette valeur, pas avant.

    De plus, une fois qu'une variable s'est vue affecter un object avec z = quelquechose;, elle ne pointera jamais vers un autre objet que celui-là, sauf si on fait à nouveau z = autrechose; .
    Aucun appel de méthode sur cet objet ne peut y faire quoi que ce soit. En théorie, si l'objet est mutable, appeler une méthode dessus peut changer le contenu de l'objet. String étant immutable, cela ne peut pas arriver non plus.

    Bref, une fois qu'une variable pointe vers un objet String, elle ne pointera pas vers un autre, sauf si on lui affecte cet autre avec z = autre;
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut
    autrement dit lorsque j'effectue System.out.println(z); z contient "Hello World" sans espace mais pourquoi la comparaison retourne false en tant que x et z en affichant leurs contenu contient la meme valeurs et les deux sont initialisées par literal avec les deux cote de string ""

Discussions similaires

  1. livre OCA SQL EXPERT EXAM GUIDE 1Z0-047
    Par rvfranck dans le forum Livres
    Réponses: 14
    Dernier message: 21/12/2009, 14h41
  2. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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