您的位置:首页 >Java自定义类Map打印地址解决方法
发布于2026-02-02 阅读(0)
扫一扫,手机访问

当Java自定义类(如Banking)未重写toString()方法时,将其存入LinkedHashMap后直接打印对象或集合,会输出类似`Banking@7852e922`的哈希码形式,而非实际字段值;解决方法是在类中显式重写toString()方法。
Java中,所有类默认继承自Object类,而Object.toString()的默认实现返回的是类名 + @ + 对象哈希码的十六进制表示(例如 org.encap.Banking@7852e922)。这正是你在控制台看到内存地址格式输出的根本原因——它并非真正的“内存地址”,而是hashCode()的字符串化表现。
要让System.out.println(mp.get(1))、mp.values()或mp.entrySet()等操作输出可读的业务数据(如用户名和密码),必须在Banking类中重写toString()方法,明确指定如何将对象状态转换为字符串。
✅ 正确做法:在 Banking.java 中补充 toString() 方法(推荐使用 @Override 注解确保覆盖正确):
package org.encap;
public class Banking {
private int username;
private String password;
// Getters and Setters (existing code)
public int getUsername() {
return username;
}
public void setUsername(int username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// ✅ 重写 toString() 方法 —— 关键修复
@Override
public String toString() {
return "Banking{" +
"username=" + username +
", password='" + password + '\'' +
'}';
}
}? 补充说明与最佳实践:
运行修复后的代码,输出将变为:
Banking{username=111, password='Password'}
Banking{username=222, password='Password2'}
[Banking{username=111, password='Password'}, Banking{username=222, password='Password2'}]
[1=Banking{username=111, password='Password'}, 2=Banking{username=222, password='Password2'}]✅ 总结:toString() 是Java对象对外“自我描述”的标准接口。任何需要被直接打印、日志记录或调试查看的自定义类,都应合理重写该方法——这不是可选项,而是专业Java开发的必备实践。
上一篇:抖音极速版金币变少怎么恢复
下一篇:Win11显示器色深设置方法
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9