int a[] = {1,4,8,9,2,6,5,7,3};
        int b[] = new int[a.length];
        
        System.arraycopy(a, 0, b, 0, a.length);//把 a copy 到 b 上         /*   下面两个比较,得出结果不同,是怎么个原因?   */
         System.out.println(a.equals(b));// 输出:false
        System.out.println(Arrays.equals(a, b));// 输出:truejava

解决方案 »

  1.   

    System.out.println(Arrays.equals(a, b));// 输出:true
    比较的是两个数组的内容
    System.out.println(a.equals(b));// 输出:false
    比较的是两个数组对象可以查看api文档啊
      

  2.   

    1、Arrays.equals(a, b),这条语句中的equals,它是判断两个数组的值是否相同。显然相同。
    2、a.equals(b),这里的equals是判断两个数组的引用地址是否相等。显然不同的。
    3、a.equals(b),假如a,b是String类型的话,那么这个equals却是判断值是否相同。在JDK中,String类型重写了从Object类继承的equals方法,方法实现也改变了,这个需要注意!
      

  3.   

    在java中数组是一个对象,数组这个对象没有对equals这个方法进行重写,所以数组对象在调用equals的时候,使用的是Object的equals方法,查看源码,可以看出,Object的equals方法如下:
    public boolean equals(Object obj) {
        return (this == obj);
    }
    很明显,Object的euqals对象返回的结果是,两个对象的引用是否相同,也就是说,这两个对象是否是一个对象。在此程序中,你创建了两个对象,很明显,它俩的元素值即便相同,也绝对不是一个对象,所以返回的肯定是false。而Arrays.equals(a,b)源码如下:
    public static boolean equals(int[] a, int[] a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;    int length = a.length;
        if (a2.length != length)
            return false;    for (int i=0; i<length; i++)
            if (a[i] != a2[i])
                return false;    return true;
    }
    根据源码看出,很明显如果两个数组的长度一样,并且,对应位置的元素值一样,返回的就是true。所以此程序中Arrays.equals(a, b)返回的肯定是true。