我有一个ArrayList
,其中包含来自User
类的一些对象。当我打印这些物体时,我得到了:
[User @ 18fd984,User @ 18fd984]
如何以正确的方式打印这些对象?
答案 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());
}