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

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

[User @ 18fd984,User @ 18fd984]

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

覆盖类中的方法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); } 

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

 public void print(Object obj) { write(String.valueOf(obj)); } 

String类的valueOf(Object obj)

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

如您所见,调用obj.toString() ,正如@GuidoGarcía所述,覆盖toString()方法就是您所需要的。

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

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

可能这已经太迟了,无法回答这个问题,但我还是遇到了同样的问题,还写了一些代码,还有一些额外的function。

如果您仍在寻找解决方案,这里是一个通用的解决方案。 这肯定需要一些反思,但这解决了目的。

java中的Generic toString()方法