Java中集合对象名是集合的首地址吗?为什么打印出来是集合每个元素的首地址?

ArrayList<Goods> array = new ArrayList<Goods>();//Goodss是商品类
Goods g1 = new Goods();
Goods g2 = new Goods();
.......//g1,g2赋值过程省略
array.add(g1);
array.add(g2);
System.out.println(array);
打印结果是:
[Goods@1a61172, Goods@1c391c3]
提问:
集合对象名"array"不是代表集合变量首地址吗(跟数组一样:数组名就是数组首地址),但是为什么打印出来是集合每个元素的首地址?谢谢回答!

是这样的 我来告诉你 ,定义了一个ArrayList的容器array 然后这个容器里只能放Goods类型的变量 GOOds这个类里面的对象
如果你不使用泛型 就会调用ArrayList他爷爷的toString 因为ArrayList没有 他爸爸也没有 只能他爷爷用toString
但是你使用泛型了 就会调用GOODs里面的toString 所以你只需要在GOODs里面覆盖一个toSTring方法就行
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-06-15
以ArrayList为例
ArrayList的父类AbstractList的父类AbstractCollection里面有实现toString()

public String toString() {
Iterator<E> i = iterator();
if (!i.hasNext())
return "[]";

StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (!i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}追问

初学Java,不太懂您的代码,能再说清楚一点吗?谢谢!

本回答被网友采纳
第2个回答  2018-07-29
因为你写的商品类没有重写toString
而为什么打印出来的地址,因为,你打印的时候默认调用商品类的父类Object类 而且打印调用的方法toString方法也是父类的 因此返回的是内存地址
相似回答