2015-04-05 244 views
1

当我创建一个ArrayList对象并向其中添加其他对象时,打印出ArrayList对象将打印出内部对象的内存引用。但是,如果将String添加到ArrayList对象,则不会打印出String的内存引用,而是显示实际的String值。字符串也是类的权利对象,所以为什么它不打印出字符串内存引用?使用toString打印ArrayList

+2

'String'重写'Object.toString'。其他对象不要 – Reimeus 2015-04-05 20:48:41

+0

噢,好的,谢谢。这是一个好的,简洁的答案= p – Sygnerical 2015-04-05 20:55:29

+0

除了'String'以外,许多其他类实现'toString()'方法,就像你自己的类一样。并且你看到的调用“native”Object#toString()的数字不是对象的内存引用,而是它的哈希码。 – 2015-04-05 21:00:29

回答

2

在Java中Collection(这是一个ArrayList延伸的)的toString方法在它的每个元素的使用String.valueOfhttp://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString()

字符串表示形式集合的元素列表的顺序,他们由其迭代器返回,并用方括号(“[]”)括起来。相邻元素由字符“,”(逗号和空格)分隔。元素被转换为String.valueOf(Object)的字符串。

String.valueOf被简单地抓住物体的toString值:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#valueOf(java.lang.Object)

如果参数null,则字符串等于 “零”;否则,返回obj.toString()的值。

0

当您打印列表,列表的toString()方法被调用,这反过来又要求其元素的toString()方法。

对象,每个类扩展,类有一个toString()方法,创建您所看到的“内存地址”输出(实际上它不是内存地址,但无论如何)。 String类重写toString()方法以返回其内容。

要修复输出“问题”,请在您添加到List的其他对象的类中覆盖toString()方法,以返回“可读性”的内容。