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

