J'ai appris que c'est du diable pour tester l'égalité des chaînes avec mais si j'utilise quelque chose comme p> IT imprime true. p> Pourquoi? P> P> == code> au lieu de string.equals () code>, car chaque chaîne était une référence à son propre objet .
3 Réponses :
Ce n'est pas le cas. C'est toujours une mauvaise chose à faire - vous serez toujours tester l'égalité de référence au lieu d'égalité de valeur.
public class Test
{
public static void main(String[] args)
{
String x = "hello";
String y = "hel" + "lo"; // Concatenated at compile-time
System.out.println(x == y); // Prints true
}
}
Merci - mais pourquoi travaille-t-il si j'utilise deux littéraux identiques?
Cela n'a pas changé. Cependant, le compilateur Java utilise String.Intern () pour vous assurer que les chaînes identiques du code source compilent vers un même objet de chaîne. Si toutefois, vous chargez une chaîne à partir d'un fichier ou d'une base de données, il ne sera pas le même objet, à moins que vous ne forciez cela à l'aide de String.Intern () ou d'une autre méthode. P>
C'est une mauvaise idée et vous devez toujours utiliser des angles () p>
Les objets de chaîne interne manuellement sont risqués car ils ne peuvent jamais être internes ni déchets collectés. On pourrait facilement consommer toute la mémoire disponible de cette façon.
@Adriaan - Les chaînes internées inaccessibles sont des ordures recueillies. Cela a été apparemment mis en œuvre dans JDK 1.2.
look, c'est un concept délicat.
Il y a une différence entre: p> et p> si vos chaînes étaient des objets, c'est-à-dire p> Ensuite, deux objets différents auraient été créés dans le pool de cordes dans deux emplacements de mémoire différents et faire P> a.substring(2, 5).equals(b);
b.equals(c);
Jeter un coup d'œil sur Stackoverflow.com/questions/1091045/... . Ils discutent également de cette question.
Veuillez poster un exemple qui montre comment "cela fonctionne maintenant".
Quelle amusant cela est venu - j'enversais {string == null? "": String} - Tous mes tests ont passé, mais quand les chaînes ont commencé à être lues de la base de données ...