黑马程序员技术交流社区

标题: 有关ArrayList容器存取问题 [打印本页]

作者: 谢赞伟    时间: 2015-1-27 11:08
标题: 有关ArrayList容器存取问题
ArrayList容器存储的是对象的引用(地址)。那么当输出容器的引用时,输出的应该是容器中对象在内存中的地址。

class  ArrayListDemo
{
    public static  void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void main(String[] args)
    {
        ArrayList al = new ArrayList();
        al.add(new Person("lisi01",31));
        al.add(new Person("lisi02",33));
        al.add(new Person("lisi03",32));
        al.add(new Person("lisi04",35));
        al.add(new Person("lisi05",35));
        al.add("java01");
        al.add("java02");
        sop(al);
    }
}
问题:字符串对象和new出来的对象有什么不同。为何输出的结果不同?new出来的对象输出的是哈希值。而字符串对象输出的是字符串呢?
运行结果:
F:\JAVA\黑马自学视频\JAVA零基础入门视频\第14天\Day14>java ArrayListDemo
[Person@1db9742, Person@106d69c, Person@52e922, Person@25154f, Person@10dea4e, java01, java02]
F:\JAVA\黑马自学视频\JAVA零基础入门视频\第14天\Day14>



作者: d342784178    时间: 2015-1-27 14:59
这是toString方法的问题
当输出集合的时候调用了集合的toString方法
(猜想)集合重写了toString方法去调用集合内每个元素的toString方法
而person类的toString方法没有重写 则调用父类的toString方法
输出格式为 : 类名+@+hash值
而String类中重写了toString 输出了String对象的值
作者: 谢赞伟    时间: 2015-1-27 22:10
d342784178 发表于 2015-1-27 14:59
这是toString方法的问题
当输出集合的时候调用了集合的toString方法
(猜想)集合重写了toString方法去调用集 ...

瞬间明白。谢谢!:loveliness:
作者: d342784178    时间: 2015-1-28 08:43
谢赞伟 发表于 2015-1-27 22:10
瞬间明白。谢谢!

不客气 哈
作者: mengxiang1993    时间: 2015-1-28 10:49
学到了,谢谢
作者: lwj123    时间: 2015-1-28 18:36
这个简单:
自定义类并没有去复写Object中的equals方法
而String中复写了这个方法

所以才出现你说的那种效果!
作者: 备战    时间: 2015-1-28 19:11
感谢楼主分享.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2