Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Arrays.equals不工作_Java_Arrays - Fatal编程技术网

Java:Arrays.equals不工作

Java:Arrays.equals不工作,java,arrays,Java,Arrays,我有一个数组,它是我读入的文件的字节[]。我需要检查文件的前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])

我有一个数组,它是我读入的文件的字节[]。我需要检查文件的前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!";
    }
这是可行的,但它看起来不太好,我想它不是很有效。所以我研究了其他方法,找到了array.equals()。我更改了代码以反映:

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

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

您的条件不相等

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

如果存在至少一对不相等的元素,则第二个为真

我相信你需要第二个代码,但是你需要稍微修改一下。 的第三个参数索引被排除在外。所以你需要

Arrays.copyOfRange(ips_bytes, 0, 5))
或者更好

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

我认为它应该具有相同的字节范围:

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)));

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

只需使用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;
}
public boolean compareFirstBytes(字节[]arrayOne,字节[]arrayTwo,整数范围){
对于(int i=0;i
可能数组不相等如果每次比较都失败(您使用的是
&&
),则第一个示例的计算结果仅为
true
。如果任何比较失败,第二个将失败。逻辑甚至不太相似。您想使用
Arrays.copyOfRange(ips_bytes,0,ips_ident.length)
以确保获得匹配的元素范围。Hanks MadProgrammer可以工作。如果至少有一个失败,它将返回失败?这仍然是一个问题,因为他们每个人都匹配,为什么会返回失败?