Java中二维数组不能用Arras.equals()比较

起因是学了稀疏数组的压缩和还原后,顺手用了个Arrays.equals()比较,返回false。这两个数组一摸一样,为什么返回false,去看了Arrays.equals()方法的源码发现没法比较二维数组。

    public static boolean equals(int[] a, int[] a2) {
        if (a==a2)
            return true;   //如果这两数组名字相同,返回true
        if (a==null || a2==null)
            return false;  //如果两数组其中一个为空,返回false
 
        int length = a.length;
        if (a2.length != length)
            return false;  //如果这两个数组长度不同,返回false
 
        for (int i=0; i<length; i++)
            if (a[i] != a2[i])
                return false;  //每一个元素进行对比,如果有一个不同,返回false
 
        return true;       //走到这一步就说明数组中每个元素都相等,返回true
    }

如果输入比较的是两个二维数组,在第4步中就会返回false,因为拿出来对比的是哈希值或者内存地址(这个地方我不是很清楚),并不是数组中的元素。

我就自己写了下 忽略健壮性

    static  boolean isEquals(int[][] a,int[][] a2){
        //健壮性那些就先不管了默认都有数据
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if(a[i][j]!=a2[i][j])
                    return false;
            }
        }
        return true;
    }

posted on 2022-04-10 11:00  莫甘娜  阅读(105)  评论(0)    收藏  举报