Stu*_*rra 52
Clojure中的等式(=函数)总是测试值,而不是标识,所以=如果它们具有相同的内容,则两个字符串.
对于大多数Java类型,包括String,Clojure都会=调度到Java .equals.String.equals定义为"表示相同的字符序列".
如果你想测试身份(这些指针是否在内存中的相同位置?)使用该identical?功能.
(= "hello" (str "hel" "lo"))
; => true
Run Code Online (Sandbox Code Playgroud)
JVM有一个字符串池,每个值最多保存一个条目,因此标识和值相等是相同的比较.有一些方法可以使用StringBuilder.,String.并且这不是严格正确的,但是因为clojure相等函数调用.equals,如果身份不同,将执行值比较.