Clojure是否相同?如果被比较的东西实际上是同一个实例,函数只返回true?

Zur*_*iar 5 clojure

我想

(identical? x y)
Run Code Online (Sandbox Code Playgroud)

如果x和y都是同一个实例,则只返回true?那么这个怎么样:

(def moo 4)
(def cow 4)

(identical? moo cow)
true
Run Code Online (Sandbox Code Playgroud)

然而我认为moo和cow都是整数'4'的独立实例?是什么赋予了?

Leo*_*tny 8

之间.在JVM两个相等的整数-128127总是相同的,因为它保持IntegerCache.

这意味着-128和127之间的两个相等整数始终是Integer类的实例.

尝试比较不同的整数:

(identical? 4 (+ 2 2)) ; true
(identical? 127 127) ; true
(identical? 128 128) ; false
Run Code Online (Sandbox Code Playgroud)

有关Code Golf的更多信息,请参阅Code answer.