请原谅我的英语不好
我正在尝试创建一个HashMap,将String作为键,将Object作为参数,我想在程序每次运行时进行初始化,以便将其添加到HashMap中的新键中。
问题在于,并非所有值都被返回,即第二个值返回了一个奇怪的输出。
package javaex1;
import java.util.*;
public class Javaex1 {
public static void main(String[] args) {
Person obj = new Person("Eminem", "Male");
HashMap<String, Person> MapPerson = new HashMap<String, Person>();
MapPerson.put("Eminem", obj);
System.out.println(MapPerson);
}
}
对象
package javaex1;
public class Person {
String Name;
String Gender;
public Person (String name, String Gend) {
this.Name = name;
this.Gender = Gend;
}
public String getName() {
return Name;
}
public String getGender() {
return Gender;
}
}
任何帮助或提示,我们将不胜感激!预先感谢您的宝贵时间!
预期结果应为“ Eminem Male”。相反,我得到的是这样:
{Eminem=javaex1.Person@2a139a55}
答案 0 :(得分:2)
发生这种情况是因为您试图打印一个对象,打印时一个对象提供了默认的Object类的toString实现,如下所示
// Object类中toString的实现
META6.json
这是您在当前输出中看到的。
您应该像这样在Person类中使用tover方法。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
以便它返回姓名和性别
答案 1 :(得分:1)
您应该覆盖toString
类中的Person
方法。像这样:
@Override
public String toString() {
return this.Name + " " + this.Gender;
}
答案 2 :(得分:-1)
您正在打印MapPerson
对象,而不是Person
对象。
您的代码应为:
Person person = MapPerson.get("Eminem");
System.out.println(person.getName() + " " + person.getGender());