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

Java调用自定义数组方法后输出内存地址而非数组内容问题

Java打印数组输出[D@哈希值问题说明

成因

Java中的数组属于引用类型,直接将数组对象传入System.out.println()方法时,会自动调用对象的toString()方法。由于数组类没有重写java.lang.Object的默认toString()逻辑,默认返回的字符串格式为[元素类型@哈希值:

  • 开头的[D代表当前对象是double类型的一维数组
  • @后的十六进制字符串是数组对象的哈希码,和内存地址直接相关,并非数组存储的实际元素内容。

解决方案

1. 调用Arrays工具类的toString方法(最常用)

首先在代码开头导入java.util.Arrays工具类,打印数组时传入Arrays.toString(数组变量)即可直接输出格式化后的全部元素内容。
修改后的完整代码如下:

import java.util.Arrays;

public class Ex1 {
    public static void main(String[] args) {
        Ex1 exone = new Ex1();
        double[] bob = exone.square(2, 6, 9, 8);
        System.out.println(Arrays.toString(bob));
    }

    public double[] square(int a, int b, int c, int d) {
        double[] result = {a*a, b*b, c*c, d*d};
        return result;
    }
}

运行后输出结果为:[4.0, 36.0, 81.0, 64.0]

2. 遍历数组逐个打印

如果需要自定义输出格式,可通过循环遍历数组的每个元素单独打印:

// 普通for循环遍历
double[] bob = exone.square(2, 6, 9, 8);
for (int i = 0; i < bob.length; i++) {
    System.out.printf("第%d个计算结果: %.1f%n", i+1, bob[i]);
}

// 增强for循环遍历
for (double num : bob) {
    System.out.println(num);
}

3. 多维数组打印方案

如果后续需要打印二维及以上的多维数组,使用Arrays.toString只能输出子数组的地址,替换为Arrays.deepToString(数组变量)即可递归打印所有层级的元素。


内容的提问来源于stack exchange,提问作者Drunkasaurus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:36:05