如何比较Java Byte []数组?

Laz*_*azy 82 java

public class ByteArr {

    public static void main(String[] args){
        Byte[] a = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
        Byte[] b = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
        byte[] aa = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
        byte[] bb = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};

        System.out.println(a);
        System.out.println(b);
        System.out.println(a == b);
        System.out.println(a.equals(b));

        System.out.println(aa);
        System.out.println(bb);
        System.out.println(aa == bb);
        System.out.println(aa.equals(bb));
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么他们都打印假.

当我运行"java ByteArray"时,答案是"false false false false".

我认为a []等于b []但是JVM告诉我我错了,为什么?

Luk*_*asz 174

Arrays.equals()如果要比较包含基本类型值(如byte)的数组的实际内容,请使用此选项.

System.out.println(Arrays.equals(aa, bb));
Run Code Online (Sandbox Code Playgroud)

使用Arrays.deepEquals了包含对象数组的比较.

  • @Lazy:是的,道理是一样的...你不能使用原始字节[]作为在地图键...阅读更多在这里:http://stackoverflow.com/questions/1058149/using-a-byte - 阵列-AS-HashMap的琴键的java (3认同)

Pet*_*rey 6

.equals()由于 byte[] 是可变的,因此只有当它是同一个对象时才被视为存在。

如果你想比较你必须使用的内容Arrays.equals(a, b)

顺便说一句:这不是我设计的方式。;)


sou*_*eck 5

因为它们不相等,即:它们是内部具有相同元素的不同数组.

尝试使用Arrays.equals()Arrays.deepEquals().

  • 这是 Java 废话的一部分:为什么使用不同类中的静态方法来比较另一个类中的对象?那就是:为什么他们不重写 `equals()` 方法? (2认同)