关于java:如何以正确的方式打印对象内容?

How to print object content in correct way?

本问题已经有最佳答案,请猛点这里访问。

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

[User@18fd984, User@18fd984]

如何正确打印这些对象?


在类中重写EDCOX1(0)方法以生成您喜欢的输出,而不是Java自动生成的默认值。例子:

1
2
3
4
5
6
7
8
public class User {
   private String name;
   ...
   @Override
   public String toString() {
       return name;
   }
}

对于复杂的对象,ApacheCommonsLang提供了一些方便的方法,如果您已经在项目中使用了这种依赖关系:

1
2
3
4
@Override
public String toString() {
   return ToStringBuilder.reflectionToString(this);
}


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

1
2
3
4
public void print(Object obj)
{
    write(String.valueOf(obj));
}

String类的valueOf(Object obj)

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

如您所见,调用obj.toString()和@guido garc_a状态时,需要覆盖toString()方法。

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

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