这在更复杂的示例中出现过,但考虑一下这种情况
`
(*defn 简单 []
(*let [b (byte-array [(byte 0)])
m (byte 0)]
(= m (aget b 0))))
`
在编译后的字节码中,m和(aget b 0)都被确认为字节,但都使用Byte.valueOf()装箱,然后使用RT.uncheckedLongCast()进行类型转换,最终以长整型进行比较
26: iload_2 27: invokestatic #69 // Method java/lang/Byte.valueOf:(B)Ljava/lang/Byte; 30: checkcast #81 // class java/lang/Number 33: invokevirtual #85 // Method clojure/lang/RT.uncheckedLongCast:(Ljava/lang/Object;)J
在紧循环中操作和匹配字节数组时,这种装箱对性能有显著影响。
附上了一份测试,展示了字节(link: )和长整型(link: )性能差异的示例试验。