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

LinkedHashMap中使用Getter/Setter后输出内存地址问题求助

解决Java打印自定义对象输出内存地址而非属性值的问题

问题原因

直接打印自定义类对象时,Java默认调用Object类的toString()方法,返回格式为包名.类名@哈希码,也就是你看到的内存地址字符串。要输出对象的实际属性值,需要自定义对象的字符串表示形式。


解决方案1:重写Banking类的toString()方法

在Banking类中添加toString()方法,将对象的属性值拼接成可读字符串返回,这样打印对象时就会自动调用这个方法输出属性内容。

修改后的Banking类代码:

package org.encap;

public class Banking {
    private int username;
    private String password;
    
    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 + "'}";
    }
}

运行原Website类代码,输出会变成:

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'}]

解决方案2:遍历集合时手动调用Getter方法

如果不想修改Banking类,可以在打印集合时,手动遍历每个元素并调用Getter方法获取属性值:

修改后的Website类main方法代码:

public static void main(String[] args) {
    Banking a=new Banking();
    a.setUsername(111);
    a.setPassword("Password");

    Banking b=new Banking();
    b.setPassword("Password2");
    b.setUsername(222);

    Map<Integer, Banking> mp=new LinkedHashMap<>();
    mp.put(1, a);
    mp.put(2, b);

    // 打印单个对象的属性
    Banking banking1 = mp.get(1);
    System.out.println("username: " + banking1.getUsername() + ", password: " + banking1.getPassword());
    Banking banking2 = mp.get(2);
    System.out.println("username: " + banking2.getUsername() + ", password: " + banking2.getPassword());

    // 打印所有对象的属性
    System.out.println("所有对象属性:");
    for (Banking banking : mp.values()) {
        System.out.println("username: " + banking.getUsername() + ", password: " + banking.getPassword());
    }

    // 打印键值对的属性
    System.out.println("键值对属性:");
    for (Map.Entry<Integer, Banking> entry : mp.entrySet()) {
        System.out.println("key: " + entry.getKey() + ", username: " + entry.getValue().getUsername() + ", password: " + entry.getValue().getPassword());
    }
}

运行后输出会是:

username: 111, password: Password
username: 222, password: Password2
所有对象属性:
username: 111, password: Password
username: 222, password: Password2
键值对属性:
key: 1, username: 111, password: Password
key: 2, username: 222, password: Password2

内容的提问来源于stack exchange,提问作者Deepak Venkatesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:55:16