7
votes

La comparaison des chaînes identiques me donne faux

J'ai deux chaînes identiques, une dans une matrice et une dans une variable de chaîne. Quand je comparais ces cordes identiques, je suis faux à chaque fois. J'ai débogué et débogué, mais j'ai le même résultat à chaque fois. Voici le code en question xxx

à nouveau, j'ai débogué tous les détails mineurs de ce programme et je suis sûr de 101% des cordes sont identiques. Pourquoi Java revient-il faux à la comparaison?


4 commentaires

Pourquoi utilisez-vous une classe booléenne (classe Java) au lieu du type booléen autochtone? Aussi, pourquoi utiliser l'opérateur == au lieu de la méthode égale ()?


Nous avons besoin d'une liste de faq top dix, == au lieu d'égaux apparaît tout le temps.


@Steve kuo c'est une bonne idée. Devrait le suggérer sur Meta si ce n'est pas là déjà.


Pourquoi diable voudriez-vous -1 moi! == Fonctionne sur les cordes dans chaque langage de programmation que j'ai rencontré. La possibilité que cela ne fonctionnerait pas ne me soit même pas arrivé, ni de beaucoup d'autres programmeurs.


5 Réponses :


16
votes

Lorsque vous utilisez l'opérateur == en Java avec des objets, vous essayez de comparer les références d'objet. C'est-à-dire que cet objet est-il en train de pointer vers le même objet que cet autre objet. À moins que les chaînes ne soient internées, cela ne fonctionnera pas.

Utilisez string.equals (objet) à la place: xxx


2 commentaires

Il n'y a pas besoin d'utiliser booléen au lieu de booléen .


Venait juste de le dire comme trouvé dans l'op. Si c'était le mien, j'aurais utilisé final Boolean .



-5
votes

Est-ce que cela aide?

Boolean equal = (temp == answers[i]);


1 commentaires

-1 pour manquer le problème complètement



5
votes

Vous faites comparaison de référence, pas de comparaison de valeur. Lorsque vous utilisez l'opérateur ==, il vérifie si les références sont égales, elles ne sont pas. Si vous souhaitez vérifier si les valeurs sont égales, utilisez le est égal à la méthode .

boolean equal = temp.equals(answers[i]);


0 commentaires

1
votes

== en Java pour les chaînes est comparable à voir si elles sont le même objet, pas la même valeur de chaîne. Vous devez utiliser des angles à la place qui compareront la valeur. == fonctionne parfois parce que les chaînes peuvent être internées et se référer au même objet via une référence même si elles sont créées séparément via le même littéral (SO string b = "hey" et c = "hey" finissent comme étant le même objet en arrière-plan parce que "hey" a été interné à un objet de chaîne caché).


0 commentaires

-1
votes

Comme d'autres personnes ont montré, vous devez utiliser égale .

mais j'utiliserais également le booleanvalue de l'objet booléen.

ici est votre code correctement effectué xxx


6 commentaires

Probablement parce que l'utilisation boolean.boolvalue est beaucoup plus compliquée que boolean .


et il serait incorrect à la valeur booléenne primitive de toute façon


Je ne suis pas celui qui a utilisé Boolean. Je viens d'utiliser le même code que le même code, mais l'améliore


@David: (ONU) La boxe est très chère


C'est pourquoi il devrait utiliser Boolean. Mais vous ne gagnez rien (sauf le code plus long) d'appeler BooleanValue, car c'est ce que le compilateur Java 5+ vous insère de toute façon. La surcharge provient d'utiliser des types de référence au lieu de primitives.


Je n'ai pas dit que c'était un bon vote, je viens de l'expliquer.