Java打印JSON解析的自定义类对象输出类名@哈希值问题求解
问题原因
- 你看到的
model.Thingy@b4c966a格式输出是Java语言的默认机制,不属于代码错误:Java中所有类默认继承自java.lang.Object类,Object类提供的默认toString()方法返回值就是类全限定名@哈希码的十六进制形式,该后缀不是实际内存地址,是JDK为对象生成的哈希标识。你直接打印对象t时会自动调用该类的toString()方法,所以得到了对应输出。 - 你之前的项目中同款代码可以输出预期内容,是因为之前项目里对应的实体类已经重写了
toString()方法,当前项目的Thingy类没有做这个重写操作,所以调用了父类Object的默认实现。
修复方案
有三种常用修复方式,可根据项目情况选择:
- 手动在
Thingy类中重写toString()方法,自定义输出内容,示例代码如下:
@Override public String toString() { // 可根据需要展示的字段自行调整拼接逻辑 return "Thingy{" + "name='" + name + '\'' + ", cate='" + cate + '\'' + '}'; }
- 如果项目引入了Lombok工具,直接在
Thingy类上添加@ToString注解即可,框架会自动根据类的字段生成对应的toString方法,不需要手动维护代码。 - 不改动
Thingy类的前提下,打印时主动拼接需要输出的字段,避免直接打印对象本身,示例如下:
System.out.println("输出内容:" + t.getName() + ",分类:" + t.getCate());
内容的提问来源于stack exchange,提问作者john_w
相关产品推荐
相关产品推荐

