在Clojure中有没有检查字符串相等性的方法?即,我需要知道它们的内容是否相等,而不是位置。
谢谢。
在Clojure中有没有检查字符串相等性的方法?即,我需要知道它们的内容是否相等,而不是位置。
谢谢。
Clojure中的等式(=
函数)总是测试值,而不是身份,因此当两个字符串具有相同内容时,则它们是=
。
对于大多数Java类型,包括String,Clojure =
调用Java .equals
。String.equals定义为“表示相同的字符序列”。
如果您想测试标识(这些指针是否指向内存中的相同位置?),请使用identical?
函数。
(= "hello" (str "hel" "lo"))
; => true
Java虚拟机有一个字符串池,每个值最多只保存一个条目,因此身份和值相等是相同的比较。使用 StringBuilder.
和 String.
可以绕过这一规则,但由于Clojure等式函数调用了 .equals
方法,如果身份不同,则会执行值比较。
(identical? "hello" (str "hel" "lo"))
返回 false。Java 的字符串池只针对常量字符串。因此,(identical? "hello" "hello")
为 true,但是一旦你计算出某个字符串,它就不会与其他任何字符串指向同一内存地址。你可以使用 (identical? "hello" (.intern (str "hel" "lo")))
强制将字符串存储在池中并进行查找,这样结果为 true。 - amalloy
=
不使用通配符或正则表达式。 - Stuart Sierra