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

