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
相关产品推荐
相关产品推荐

