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

Java 如何以正确的方式打印对象内容?,java,object,tostring,Java,Object,Tostring,我有一个ArrayList,其中包含User类中的一些对象。当我打印这些对象时,我得到: [User@18fd984, User@18fd984] 如何以正确的方式打印这些对象?重写类中的方法toString,以生成您喜欢的输出,而不是Java自动生成的默认值。例如: public class User { private String name; ... @Override public String toString() { return name;

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

[User@18fd984, User@18fd984]


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

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

public class User {
   private String name;
   ...
   @Override
   public String toString() {
       return name;
   }
}
对于复杂对象,如果您已经在项目中使用此依赖项,则提供了一些方便的方法:

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

查看
PrintSteam
class中
print(objectobj)
方法的源代码:

public void print(Object obj)
{
    write(String.valueOf(obj));
}
public static String valueOf(Object obj)
{
    return (obj == null) ? "null" : obj.toString();
}
value of(Object obj)
of
String
class:

public void print(Object obj)
{
    write(String.valueOf(obj));
}
public static String valueOf(Object obj)
{
    return (obj == null) ? "null" : obj.toString();
}
正如您所看到的,
obj.toString()
被调用,正如@Guido García所说,重写
toString()
方法是您所需要的

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

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

这是正确的——默认对象是字符串输出。为您的用例定义“correct”。对象的
toString
返回
getClass().getName()+'@'+Integer.toHexString(hashCode())
。根据Guido García的回答,您必须为您的类重写此方法。