为什么我的列表会在内存中对象位置?

时间:2016-03-17 17:48:29

标签: 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<User> list = Arrays.asList(user1, user2);
Gson gson = new Gson(); 
String json = gson.toJson(list);  
System.out.println(list);

最后一行应该在json中显示我的对象但是我只是得到[User @ 579bb367,User @ 1de0aca6],这是为什么?感谢

4 个答案:

答案 0 :(得分:3)

你的意思是

System.out.println(json);

你做的是打印List,没有toString,只会打印一个默认哈希

答案 1 :(得分:0)

您只需打印列表的哈希码。当您调用System.out.println()方法时,它将调用List的toString()方法。它是

  

getClass()。getName()+&#39; @&#39; + Integer.toHexString(hashCode())

答案 2 :(得分:0)

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

答案 3 :(得分:0)

当你打印一个列表时,你实际上(隐式地)调用它的toString()方法,它通常只调用它的每个元素的toString(),用逗号连接它们并用括号括起来。如果您的User类没有覆盖toString(),它将使用Object的实现,只打印类的简单名称及其默认hashCode(),这通常是内存地址。如果你想要更聪明的东西,你必须覆盖toString()。 E.g:

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