Java 为什么我的列表对象位于内存中?

Java 为什么我的列表对象位于内存中?,java,json,Java,Json,我试图将对象列表转换为json,但值是内存中的位置 public class User { private String name; private int score; public User(String name, int score){ this.name = name; this.score = score; } User user1= new User("Luke", 50); User user2 = new User("Ryan", 70); List<

我试图将对象列表转换为json,但值是内存中的位置

public class User {

private String name;
private int score;

public User(String name, int score){
    this.name = name;
    this.score = score;
}

User user1= new User("Luke", 50);
User user2 = new User("Ryan", 70);
List<User> list = Arrays.asList(user1, user2);
Gson gson = new Gson(); 
String json = gson.toJson(list);  
System.out.println(list);
公共类用户{
私有字符串名称;
个人智力得分;
公共用户(字符串名称、整数分数){
this.name=名称;
这个分数=分数;
}
用户user1=新用户(“Luke”,50);
用户user2=新用户(“Ryan”,70);
List List=Arrays.asList(user1,user2);
Gson Gson=新的Gson();
字符串json=gson.toJson(列表);
系统输出打印项次(列表);
最后一行应该用json显示我的对象,但我只是得到[User@579bb367, User@1de0aca6],这是为什么?谢谢你的意思

System.out.println(json);

您所做的是打印列表,在没有toString的情况下,只打印一个默认哈希值。您只需打印列表的哈希代码。当您调用System.out.println()方法时,它将调用List的toString()方法。它是

getClass().getName()+'@'+Integer.toHexString(hashCode())


您需要为列表中的对象实现一个
toString()
方法,否则您将获得哈希代码。

当您打印列表时,实际上(隐式)调用了它的
toString()
方法,该方法通常只调用它的每个元素
toString()
s,用逗号表示它们,并将它们括在括号中。如果
用户
类未重写
toString()
它将使用
对象的实现,只打印类的简单名称及其默认值
hashCode()
,这通常是内存地址。如果您想要更智能的内存地址,则必须覆盖
toString()
。例如:

@Override
public String toString() {
    return String.format("[User name %s, score %d]", name, score);
}

您打印列表?可能是
System.out.println(json);
您的用户类必须定义toString方法才能使toJson方法正常工作。
list
类型为
list
User
没有被重写的
toString()
“值”是
User
实例的哈希代码