You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数学库开发疑问:getMatrix()为何返回引用而非数组值

问题分析与解决方案:Java数组打印显示引用而非内容

嘿,我来帮你理清这个问题!首先得明确一点:你的getMatrix()方法确实返回了二维数组对象,但你看到的[[I@15db9742并不是“返回了引用”,而是Java数组默认的toString()方法输出结果。

为什么会出现[[I@15db9742?

在Java中,数组属于引用类型,当你直接打印一个数组对象时,它会调用继承自Object类的toString()方法,这个方法的默认实现是:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • [[I表示这是一个int类型的二维数组([代表数组维度,两个[就是二维;I代表int类型)
  • @15db9742是该数组对象的哈希码的十六进制表示

简单说:你打印的是数组对象本身,而不是它存储的内容。

如何让数组内容正确显示?

要打印二维数组的全部值,你有两种常用方法:

方法1:使用Arrays.deepToString()

Java的java.util.Arrays类提供了专门处理多维数组的格式化方法,直接调用它就能把二维数组转成可读的字符串:

import java.util.Arrays;

// 修改你的main方法打印语句:
public static void main(String[] args){
    Mathematik.Matrix(3,3);
    Mathematik.setMatrix(10);
    System.out.println("矩阵内容:" + Arrays.deepToString(Mathematik.getMatrix()));
}

这样就能输出类似[[10, 10, 10], [10, 10, 10], [10, 10, 10]]的清晰结果。

方法2:手动遍历数组拼接字符串

如果你不想依赖Arrays类,也可以自己遍历二维数组的每个元素,拼接成想要的格式:

// 在Mathematik类里新增一个方法
static String getMatrixAsString() {
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    for (int i = 0; i < matrix.length; i++) {
        sb.append("[");
        for (int j = 0; j < matrix[i].length; j++) {
            sb.append(matrix[i][j]);
            if (j != matrix[i].length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        if (i != matrix.length - 1) {
            sb.append(", ");
        }
    }
    sb.append("]");
    return sb.toString();
}

然后在main里调用这个方法打印即可:

System.out.println("矩阵内容:" + Mathematik.getMatrixAsString());

顺便修正你代码里的其他问题

你的代码还有几个逻辑错误,会导致矩阵初始化和填充异常:

  1. Matrix()方法的初始化逻辑错误:
    当前循环里每次new int[l][j]会覆盖之前的matrix,最后得到的是new int[2][2](因为line=3时,l最大是2,j最大是2),正确的初始化应该是直接创建line行column列的数组:
    static int[][] Matrix(int line, int column){
        matrix = new int[line][column];
        line_0 = line;
        column_0 = column;
        return matrix;
    }
    
  2. 静态方法的调用方式错误:
    Mathematik里的方法都是static的,不需要实例化对象,直接用类名调用即可(实例化后调用静态方法虽然语法允许,但不符合规范)。
  3. setMatrix()的返回值没必要是int:
    这个方法是填充矩阵,不需要返回值,可以改成void类型,代码更清晰。

内容的提问来源于stack exchange,提问作者G.Danil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:18:15