Java 为什么我的列表对象位于内存中?
我试图将对象列表转换为json,但值是内存中的位置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<
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
实例的哈希代码