Comment vérifier l'égalité des chaînes de caractères en clojure sans invoquer de java.lang.Chaîne?
Est-il de toute façon en clojure pour vérifier l'égalité des chaînes de caractères?
c'est à dire j'ai besoin de savoir, de savoir si leur contenu est égal, pas l'emplacement.
grâce.
Vous devez vous connecter pour publier un commentaire.
L'égalité en Clojure (le
=
fonction) toujours des tests de valeur, pas d'identité, de sorte que les deux chaînes sont=
si elles ont le même contenu.Pour la plupart des types Java, y compris la Chaîne, Clojure
=
distribue à Java.equals
. Chaîne de caractères.est égal à est défini comme "représente la même séquence de caractères."Si vous voulez tester identité (Sont ces pointeurs vers le même emplacement en mémoire?) utiliser le
identical?
fonction.=
ne pas utiliser de caractères génériques ou des expressions régulières.La JVM a une chaîne de piscine qui contient au plus une entrée par la valeur, de l'identité et de la valeur de l'égalité sont de la même comparaison. Il y a des façons à l'aide de
StringBuilder.
etString.
où ce n'est pas strictement vrai, mais parce que le clojure l'égalité des appels de fonction.equals
, une comparaison de la valeur sera effectué si les identités sont différents.(identical? "hello" (str "hel" "lo"))
est faux. Java de la piscine de l'internement des chaînes est uniquement pour les chaînes qui sont des constantes. Donc(identical? "hello" "hello")
est vrai, mais dès que vous vous calculer une chaîne de caractères, il ne sera pas de l'aiguille, à l'égal des autres. Vous pouvez forcer de recherche/de stockage dans la piscine avec(identical? "hello" (.intern (str "hel" "lo")))
(vrai)