当我创建一个ArrayList对象并向其添加其他对象时,打印出ArrayList对象将打印出内部对象的内存引用。但是,如果我将String添加到ArrayList对象,它将不会打印出String的内存引用,而是打印出实际的String值。 String也是类权限的对象,那为什么不打印出String内存引用呢?
答案 0 :(得分:2)
Java中toString
的{{1}}方法(Collection
扩展的方法)在每个元素上使用ArrayList
:http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString()
字符串表示由一个集合元素的列表组成,它们按迭代器返回的顺序排列,用方括号括起来(" []")。相邻元素由字符","分隔。 (逗号和空格)。元素按
String.valueOf
转换为字符串。
String.valueOf(Object)
只是抓取对象的String.valueOf
值:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#valueOf(java.lang.Object)
如果参数为
toString
,则字符串等于" null&#34 ;;否则,返回null
的值。
答案 1 :(得分:0)
当您打印列表时,会调用列表的toString()
方法,该方法会调用其元素的toString()
方法。
每个类都扩展的Object,类有一个toString()
方法,用于创建"内存地址"输出你看到的(实际上它不是内存地址,但无论如何)。 String
类会覆盖toString()
方法以返回其内容。
要修复输出"问题",请覆盖您要添加到列表中的其他对象的类中的toString()
方法,以返回“#34;人类可读&#34 34。
答案 2 :(得分:0)
Object 类的 toString() 方法被 Class AbstractCollection 覆盖。 ArrayList 扩展 AbstractList 和 AbstractList 扩展 AbstractCollection。方法细节在下面提到。
公共字符串 toString() 返回此集合的字符串表示形式。字符串表示由集合元素的列表组成,按其迭代器返回的顺序排列,括在方括号(“[]”)中。相邻元素由字符“,”(逗号和空格)分隔。元素通过 String.valueOf(Object) 转换为字符串。
覆盖: 类 Object 中的 toString
返回: 此集合的字符串表示