A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

谢赞伟

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 谢赞伟 初级黑马   /  2015-1-27 11:08  /  1423 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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>


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

6 个回复

倒序浏览
这是toString方法的问题
当输出集合的时候调用了集合的toString方法
(猜想)集合重写了toString方法去调用集合内每个元素的toString方法
而person类的toString方法没有重写 则调用父类的toString方法
输出格式为 : 类名+@+hash值
而String类中重写了toString 输出了String对象的值

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
d342784178 发表于 2015-1-27 14:59
这是toString方法的问题
当输出集合的时候调用了集合的toString方法
(猜想)集合重写了toString方法去调用集 ...

瞬间明白。谢谢!:loveliness:
回复 使用道具 举报
谢赞伟 发表于 2015-1-27 22:10
瞬间明白。谢谢!

不客气 哈
回复 使用道具 举报
学到了,谢谢
回复 使用道具 举报
这个简单:
自定义类并没有去复写Object中的equals方法
而String中复写了这个方法

所以才出现你说的那种效果!
回复 使用道具 举报
备战 中级黑马 2015-1-28 19:11:11
7#
感谢楼主分享.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马