2010-10-03 9 views
2

En Java On peut créer une chaîne en utilisant un nouvel opérateur ou en utilisant + et + =. Toutes ces techniques de création de chaînes vérifient donc si la chaîne existe déjà dans le pool de chaînes. S'ils dorment alors quelle technique de création de String va vérifier le pool.Création de chaîne en Java

+0

Que voulez-vous dire? Si deux String ont la même valeur? –

+0

si elle vérifie alors pourquoi cette instruction retourne false. String hello = "Bonjour", lo = "lo"; System.out.print ((bonjour == ("Hel" + lo)) + ""); –

+0

Donc vous avez votre réponse :-) –

Répondre

5

Non, ils ne le font pas.

Exemple simple:

String s = new String("hell"); 
    String hello = "hello"; 
    s += 'o'; 
    System.out.println(hello == hello.intern()); //True 
    System.out.println(s == s.intern());   //False 
    System.out.println(s == hello);    //False 
    System.out.println(s.intern() == hello);  //True 
    //To sum up : s != s.intern() == hello.intern() == hello 

This code on ideone

Voici la nouvelle version de "s" est pas la version interne de "bonjour"

Si vous voulez avoir la version de la piscine de une chaîne spécifique, vous pouvez utiliser la méthode intern() (comme je l'ai fait ci-dessus). De cette façon, vous êtes sûr d'avoir la même référence.


Ressources:

  • Javadoc : String.intern() (vous pourriez penser que le lien pointe vers valueOf(double), mais la méthode intern() est juste après;))
+0

Vous voulez dire que seul intern() va vérifier si la chaîne existe dans le pool. –

+0

@sadananda salam, oui. –

+0

String hello = "Bonjour"; System.out.print ((bonjour == ("Hel" + "lo"))); // je dint utilise intern mais ça retourne vrai. –

3

constantes de chaîne uniquement et littéraux sont automatiquement internés. Si vous concaténez ou créez des chaînes, vous devez appeler la méthode interne(). Voir http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#intern().

+0

vous avez dit concaténer et créer des chaînes. est-ce une concaténation d'objet de chaîne ou une chaîne de caractères constante/concaténation littérale ou les deux. La création de chaîne peut être effectuée par new, +, + = operator. Dois-je utiliser interne pour tous les 3 opérateurs. –

+0

@sadananda, mon intention était en fait juste de citer des exemples. Le ** seulement ** cas où intern() est implicite est dans les deux cas (vraiment un seul, car ils sont identiques) que j'ai mentionné de "chaînes de caractères" et "chaînes de caractères". Toutes les autres formes d'obtention de chaînes (+, + =, StringBuilder.toString(), etc.) seront de nouvelles instances et non internées. –