Array.equal()给出错误的输出

Jok*_*ker -3 java arrays reflection equals

根据我的理解,应该打印以下代码true,因为两个元素都是equal.

来自java docs,Array.get()将返回:

返回指定数组对象中索引组件的值.如果对象具有基本类型,则该值自动包装在对象中.

但是,当我运行以下代码时,它正在打印 false:

  public class Test1 {

    static boolean equalTest(Object array1, Object array2) {
        return Array.get(array1, 0).equals(Array.get(array2, 0));
    }

    public static void main(String[] args) {
        int[] a = new int[1];
        byte[] b = new byte[1];
        a[0] = 3;
        b[0] = 3;
        System.out.println(equalTest(a, b));
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是实现Number的类不是或应该直接相互比较.

Jon*_*eet 11

这与数组无关.您的比较相当于:

Object x = Integer.valueOf(3);
Object y = Byte.valueOf((byte) 3);
boolean equal = x.equals(y);
Run Code Online (Sandbox Code Playgroud)

这永远不会回归true.

即使您的原始数组是原始类型,也会Array.get返回Object,因此您将获得盒装类型 - 并比较这些不同类型的值.