Java:Arrays.equals不工作
我有一个数组,它是我读入的文件的字节[]。我需要检查文件的前5个字节。首先,我这样做了: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])
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可以工作。如果至少有一个失败,它将返回失败?这仍然是一个问题,因为他们每个人都匹配,为什么会返回失败?