44 votes

La comparaison de Java avec == de deux chaînes est fausse?

Les parties de chaîne sont des chaînes [6]:

["231", "CA-Californie", "Sacramento-155328", "aleee", "Commis du service clientèle", "Alegra Keith.doc.txt"]

Mais quand je compare parts[0] avec "231" :

 "231" == parts[0]
 

le résultat ci-dessus est faux,

Je suis confus, alors quelqu'un pourrait-il me dire pourquoi?

77voto

coobird Points 70356

L' == opérateur compare les références de l'objet, non pas la valeur de l' Strings.

Pour comparer les valeurs de Strings, utilisez l' String.equals méthode:

"231".equals(parts[0]);

Cela est vrai avec n'importe quel autre objet en Java -- lorsque l'on compare les valeurs, utilisez toujours l' equals méthode plutôt que d'utiliser l' == de l'opérateur.

L' equals méthode fait partie d' Object, et devrait être remplacé par les classes qui vont être comparés d'une manière ou d'une autre.

15voto

Yishai Points 42417

Si les chaînes ne sont pas internées, == vérifie l'identité de référence. Utilisation:

  "231".equals(parts[0]);
 

au lieu.

13voto

David Johnstone Points 10565

== en Java compare l'adresse des objets (des chaînes dans ce cas).

Ce que vous voulez, c'est parts[0].equals("231")

10voto

Jesse Points 1063

Ce qui suit imprime "true";

     	String s = "231";
	if(s == "231")
	{
		System.out.println("true");
	}
	else
	{
		System.out.println("false");
	}
 

Cela est dû au fait que les chaînes ne sont pas mutables et que Java essaiera de gagner autant d’espace que possible, de sorte qu’il pointe vers la même référence de mémoire.

Cependant, ce qui suit affiche "false":

     	String s = new String("231");
	if(s == "231")
	{
		System.out.println("true");
	}
	else
	{
		System.out.println("false");
	}
 

"new" l'obligera à stocker la chaîne dans un nouvel emplacement mémoire.

En passant, vous devriez TOUJOURS utiliser .equals () pour comparer les chaînes (pour des cas comme celui-ci)

7voto

tputkonen Points 1799

Utilisez la méthode equals: parts [0] .equals ("231"). L'opérateur == compare les références d'objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X