为什么 java 中的这段代码打印一个引用而不是调用该方法的结果?

Why does this code in java print a reference instead the result of invoking the method?

我应该写一个接受 3 个二维数组的方法这个方法应该确定一个矩阵是否是另外两个矩阵相加的结果。

public class Matrix {
    public static void main(String[]args){
        int [][] a = {{5,2,3},{4,1,6},{0,7,2}};
        int [][] b = {{1,2,3},{4,5,6},{0,1,2}};
        int [][] t = {{6,4,6},{8,6,12},{0,8,4}};
        System.out.println(add(a,b));
        System.out.println(check(a,b,t));
    }

    public static int [][] add(int[][]a,int[][]b){
        int i=0;
        int j=0;
        int[][] r = new int [3][3];
        while (i<a.length){
            r[i][j] = a[i][j] + b[i][j];
                i++;
                j++;
        }
        return r;
    }
    public static boolean check(int[][]a,int[][]b,int[][]t){
        int i = 0;
        int j = 0;
        while(i<t.length){
            if(t==add(a,b))
                return true;
        }
        return false;
    }
}

add returns 一个数组。 Java 中的数组是对象,但它们不会覆盖 toString() 方法。打印时,您将打印他们的默认 toString() 调用,由 Object 实现为 return getClass().getName() + "@" + Integer.toHexString(hashCode());.

幸运的是,Java 以 java.util.Arrays.deepToString(Ojbect[]) 的形式提供了一个实用程序来生成更具可读性的字符串输出:

System.out.println(Arrays.deepToString(add(a,b)));

编辑:
你的 add 方法也是错误的。您的代码将 ij 迭代在一起,因此它只对矩阵对角线上的元素求和,而不是将所有元素相加。您应该改用嵌套循环:

public static int [][] add(int[][]a, int[][]b) {
    int[][] r = new int [3][3];
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            r[i][j] = a[i][j] + b[i][j];
        }
    }
    return r;
}

顺便说一下,您的 check 方法也是错误的 - 它试图比较数组本身而不是元​​素:

public static boolean check(int[][]a, int[][]b, int[][]t) {
    int[][] r = add(a, b);
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            if (r[i][j] != t[i][j]) {
                return false;
            }
        }
    }

    return true;
}