如何以正确的方式打印对象内容?

时间:2012-05-08 18:02:30

标签: java object tostring

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

  

[User @ 18fd984,User @ 18fd984]

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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()被调用,正如@GuidoGarcía所述,覆盖toString()方法就是您所需要的。

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

public String toString()
{
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}