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

2022-09-04 21:13:20

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

[User@18fd984,User@18fd984]

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


答案 1

重写类中的方法以生成您喜欢的输出,而不是 Java 自动生成的缺省值。例:toString

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

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

@Override
public String toString() {
   return ToStringBuilder.reflectionToString(this);
}

答案 2

从类中查看方法的源代码: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();
}

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

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

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