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

Java打印二维数组输出[[Ljava.lang.String;@xxx哈希地址如何解决?

问题根因

  • Java中数组属于引用类型,没有重写toString()方法,直接打印数组对象时会默认调用Object类的toString()实现,输出格式为[数组类型标识@内存哈希值,你看到的[Ljava.lang.String;@7ad041f3这类内容就是一维String数组的默认toString结果。
  • 你之前调用Arrays.toString(catalog)时,因为catalog是二维String数组,内部的每个元素都是一维String数组,Arrays.toString只会遍历第一层元素,直接打印内层数组的默认toString结果,所以还是会输出哈希值格式的内容,并不是你调用title、author、genre属性的方式有问题。

解决方法

你排查到的Arrays.deepToString(catalog)就是多维数组的标准打印方案,该方法会递归遍历数组的每一层元素,将所有层级的内容转换为可读的字符串输出。
如果需要单独打印某一行的一维数组,比如所有书名列表,直接用Arrays.toString(catalog[0])即可,不需要用到deepToString。

修改后可正常打印的代码示例

import java.util.Scanner;
import java.util.Arrays;
public class Card{
    String title[] = {"Hairy potter","Perck Jackson","The promised Neverland","Goosebump"};
    String author[] = {"j.k.Rowling","Rick Riordan","Kaiu Shirai","R.L.Stine"};
    String genre[] = {"Fantasy Fiction","Adventure","Dark fantasy","Horror fiction"};
    public static void main(String[] args) {
        Card obj = new Card();
        String[] title1,author1,genre1;
        title1 = obj.title;
        author1 = obj.author;
        genre1 = obj.genre;
        String[][] catalog = new String[3][4];
        for (int i = 0 ; i<4;i++){
            catalog[0][i] =title1[i];
            catalog[1][i] =author1[i];
            catalog[2][i]= genre1[i]; 
        }
        // 单独打印书名列表(一维数组用Arrays.toString)
        System.out.println(Arrays.toString(catalog[0]));
        // 打印完整二维目录(多维数组用Arrays.deepToString)
        System.out.println(Arrays.deepToString(catalog));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:39:01