Clojure中Java字节数组的意外相等性语义问题咨询
Clojure中byte数组相等性的行为说明
这是Clojure的预期行为,不需要提交Bug报告。
为什么Test 1返回false?
Clojure的=运算符对Java原生数组(包括byte数组)采用引用相等的判断逻辑——只有当两个数组是同一个对象实例时才返回true。你创建的是两个独立的byte数组对象,它们的内存引用不同,所以=返回false。
为什么Test 2返回true?
将byte数组转为seq后,=会切换为值语义的比较:逐个检查序列中的元素值是否完全一致。两个序列的元素都是(0 0 0 0),所以返回true。
额外的数组内容比较方式
如果需要直接比较byte数组的内容是否相等,推荐使用Java标准库的java.util.Arrays/equals方法:
(java.util.Arrays/equals (byte-array [0 0 0 0]) (byte-array [0 0 0 0])) ;; => true
内容的提问来源于stack exchange,提问作者Ioannis Mourginakis
相关产品推荐
相关产品推荐

