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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

yl2012

初级黑马

  • 黑马币:0

  • 帖子:9

  • 精华:0

© yl2012 初级黑马   /  2012-3-9 19:41  /  1579 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;

class  Test
{
        public static void main(String[] args)
        {
                Queue qu = new Queue();
                qu.myAdd("a");
                qu.myAdd("b");
                qu.myAdd("c");
                System.out.println(qu);

                LinkedList link = new LinkedList();
                link.addFirst("a");
                link.addFirst("b");
                link.addFirst("c");
                System.out.println(link);
        }
}

class Queue
{
        private LinkedList link;

        Queue()
        {
                link = new LinkedList();
        }

        public void myAdd(Object obj)
        {
                link.addFirst(obj);
        }
}


为什么两条输出语句的结果不一样呢?其中第一条语句输出的是地址值

3 个回复

倒序浏览
System.out.println(qu);
System.out.println(link);
等价于:
System.out.println(qu.toString());
System.out.println(link.toString());
//1.Queue的toString()方法是继承于Object类,查看API->Object的toString()方法:
  返回一个字符串,它的值等于:
  getClass().getName() + '@' + Integer.toHexString(hashCode())

//2.而link是LinkedList的实例对象,查看API->LinkList,可以看到toString()方法是继承于java.util.AbstractCollection类,此时的toString()方法已重写:
  返回此 collection 的字符串表示形式。该字符串表示形式由 collection 元素的列表组成,这些元素按其迭代器返回的顺序排列,并用方括号 ("[]") 括起来。
回复 使用道具 举报
print是按照toString的方法的返回值显示的
queue是你自定义的,要重写tostring方法才会按照你的“规则”显示。
而Linkedlist的toString方法jdk已经重写了。
回复 使用道具 举报
  qu  是你自己建立对象的一个引用,而你new了一个实体,虚拟机是把这个实体存放在堆内存中的,而这个实体有个首地址,并且把这个首地址赋给了qu  所以qu就指向了这个对象,而你System.out.println(qu); 这句话是输出了qu  所以就输出了qu指向对象的地址,即存放对象的首地址。
  而LinkedList 是一个容器,它里面存放的是对象实体,容器这块在内存中是怎么存放的我也不太清楚,还没看到呢,但是你输出link  其实就是输出这个容器中的元素,即就是你储存进去的对象,这个是没什么问题的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马