我知道 Arrays.deepEquals(Object[], Object[]) 但这不适用于原始类型(由于数组和自动装箱的限制,请参阅这个相关帖子 https://stackoverflow.com/questions/517751/java-generic-method-but-array-of-primitive-data-types-does-not-autobox).
考虑到这一点,这是最有效的方法吗?
boolean byteArrayEquals(byte[] a, byte[] b) {
if (a == null && b == null)
return true;
if (a == null || b == null)
return false;
if (a.length != b.length)
return false;
for (int i = 0; i < a.length; i++) {
if (a[i] != b[i])
return false;
}
return true;
}
将您的第一个比较更改为:
if (a == b)
return true;
这不仅捕获“两个都为空”的情况,还捕获“将数组与其自身进行比较”的情况。
但是,对于更简单的替代方案 - 使用Arrays.equals http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#equals(byte%5B%5D,%20byte%5B%5D)它对每个基本类型都有重载。 (该实现与您的实现非常相似,只是它将数组长度提升到循环之外。在 .NET 上,这可能是一种反优化,但我猜 JRE 库实现者可能更了解 JVM :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)