在clojure中有没有办法检查字符串是否相等? 即我需要知道,他们的内容是否相等,而不是位置。
感谢。
答案 0 :(得分:48)
Clojure中的等式(=
函数)总是测试值,而不是身份,因此如果两个字符串具有相同的内容,则为=
。
对于大多数Java类型,包括String,Clojure =
将调度到Java .equals
。 String.equals被定义为“代表相同的字符序列。”
如果你想测试身份(这些指针指向内存中的相同位置吗?),请使用identical?
函数。
答案 1 :(得分:8)
(= "hello" (str "hel" "lo"))
; => true
JVM有一个字符串池,每个值最多只能保存一个条目,因此标识和值相等是相同的比较。使用StringBuilder.
和String.
的方法并不严格,但由于clojure相等函数调用.equals
,如果身份不同,将执行值比较。