13

我有一个ArrayList包含一些User类的对象。当我打印这些对象时,我得到了:

[用户@18fd984,用户@18fd984]

如何以正确的方式打印这些对象?

4

2 回答 2

13

覆盖toString类中的方法以生成您喜欢的输出,而不是 Java 自动生成的默认值。例子:

public class User {
   private String name;
   ...
   @Override
   public String toString() {
       return name;
   }
}

对于复杂的对象,Apache Commons Lang提供了一些方便的方法,如果你已经在你的项目中使用了这个依赖:

@Override
public String toString() {
   return ToStringBuilder.reflectionToString(this);
}
于 2012-05-08T18:03:27.200 回答
1

查看类中print(Object obj)方法的源代码PrintSteam

public void print(Object obj)
{
    write(String.valueOf(obj));
}

valueOf(Object obj)String

public static String valueOf(Object obj)
{
    return (obj == null) ? "null" : obj.toString();
}

如您所见,obj.toString()被调用,并且正如@Guido García 所说,toString()您需要覆盖方法。

toString()类中方法的默认实现Object如下:

public String toString()
{
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
于 2012-05-08T18:20:00.463 回答