Java:Arrays.equals无效

时间:2013-08-01 00:55:29

标签: java arrays

我有一个数组,它是我读过的文件的byte []。我需要检查文件的前5个字节。首先,我做了这个:

if (ips_bytes[0] != ips_ident[0] && ips_bytes[1] != ips_ident[1] && ips_bytes[2] != ips_ident[2]
            && ips_bytes[3] != ips_ident[3] && ips_bytes[4] != ips_ident[4]) {
        return "Nope!";
    }

这样可行,但看起来不太好,我猜它效率不高。所以我查看了其他方法并找到了Arrays.equals()。我更改了代码以反映:

if (!Arrays.equals(ips_ident, Arrays.copyOfRange(ips_bytes, 0, 4))) {
        return "Baka";
    }

这不起作用,我尝试了0,4和1,5,看看范围是否不同。我错过了什么,因为这看起来不错?数组值肯定是正确的。

3 个答案:

答案 0 :(得分:6)

您的条件不相同。

如果所有相应元素对不相等,则第一个将为真

如果存在至少一对不相等的元素

,则第二个为真

我相信你需要第二个代码,但是你需要修改它。 Arrays.copyOfRange的第三个参数索引是可行的。所以你需要

Arrays.copyOfRange(ips_bytes, 0, 5))

或更好

Arrays.copyOfRange(ips_bytes, 0, ips_ident.length))

答案 1 :(得分:1)

我想它应该是相同的字节范围:

if (!Arrays.equals(Arrays.copyOfRange(ips_ident, 0, 5), Arrays.copyOfRange(ips_bytes, 0, 5)))

实施例

char[] arr1 = new char[] { 'a', 'b', 'c', 'd', 'e' };
char[] arr2 = new char[] { 'a', 'b', 'c', 'k', 'm' };
System.out.println(Arrays.equals(Arrays.copyOfRange(arr1, 0, 3), Arrays.copyOfRange(arr2, 0, 3)));

答案 2 :(得分:1)

这是一种不使用不必要的内存并且可以重复使用的方法。

只需使用for循环:

public boolean compareFirstBytes(byte[] arrayOne, byte[] arrayTwo, int range) {
    for (int i = 0; i < range; i++) {
        if (arrayOne[i] != arrayTwo[i]) {
            return false;
        }
    }
    return true;
}