【发布时间】:2010-02-25 21:51:32
【问题描述】:
clojure 中有什么方法可以检查字符串的相等性吗? 即我需要知道它们的内容是否相等,而不是位置。
谢谢。
【问题讨论】:
标签: clojure
clojure 中有什么方法可以检查字符串的相等性吗? 即我需要知道它们的内容是否相等,而不是位置。
谢谢。
【问题讨论】:
标签: clojure
Clojure 中的相等性(= 函数)始终测试值,而不是身份,因此如果两个字符串具有相同的内容,则它们是 =。
对于大多数 Java 类型,包括字符串,Clojure = 分派给 Java .equals。 String.equals 被定义为“代表相同的字符序列”。
如果您想测试身份(这些指针是否指向内存中的同一位置?)请使用identical? 函数。
【讨论】:
= 不使用通配符或正则表达式。
(= "hello" (str "hel" "lo"))
; => true
JVM 有一个字符串池,每个值最多保存一个条目,因此标识和值相等是相同的比较。有一些方法可以使用StringBuilder. 和String.,但严格来说这并不正确,但由于clojure 相等函数调用.equals,如果身份不同,将执行值比较。
【讨论】:
(identical? "hello" (str "hel" "lo")) 是假的。 Java 的实习字符串池仅适用于常量字符串。所以(identical? "hello" "hello") 是真的,但是一旦你计算出一些字符串,它就不会与其他任何字符串相等。您可以使用(identical? "hello" (.intern (str "hel" "lo"))) (true) 强制在池中查找/存储