(identical? x y)
Tests if 2 arguments are the same object
user=> (def x 1)
#'user/x
user=> (identical? x x)
true
user=> (identical? x 1)
true
user=> (identical? x 2)
false
user=> (identical? x ((constantly 1) 8))
true
user=> (identical? 'a 'a)
false
user=> (def x {:foo 1, :bar -3})
#'user/x
user=> (def y {:foo 1, :bar -3})
#'user/y
;; Values are equal, but different objects were constructed
user=> (= x y)
true
user=> (identical? x y)
false
; Java wrapper class caching
; details at: https://www.owasp.org/index.php/Java_gotchas#Immutable_Objects_.2F_Wrapper_Class_Caching
user=> (identical? 128 128)
false
user=> (identical? 127 127)
true
user=> (identical? -127 -127)
true
user=> (identical? -128 -128)
true
user=> (identical? -130 -130)
false
user=> (def a (String. "abc"))
;;=> #'user/a
user=> (def b (String. "abc"))
;;=> #'user/b
=> (identical? a b)
;;=> false
;; initialised 2 new objects
user=> (def a "abc")
;;=> #'user/a
user=> (def b "abc")
;;=> #'user/b
=> (identical? a b)
;;=> true
;; refers same objects(address), look String pooling