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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吕猛 黑马帝   /  2012-2-29 09:32  /  2112 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一下两段代码,实例一和实例二。传入的都是对象,为什么打印出来的结果不一样呢?


  1. /*
  2. 实例一:
  3. */

  4. import java.util.*;
  5. class Person
  6. {
  7.         String name;
  8.         int age;
  9.         Person(String name,int age)
  10.         {
  11.                 this.name = name;
  12.                 this.age = age;
  13.         }
  14.         public void get()
  15.         {
  16.                 System.out.println(name+"..."+age);
  17.         }
  18. }
  19. class IteratorDemo
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Person p1 = new Person("zhang san",30);
  24.                 Person p2 = new Person("li si",40);
  25.                 Person p3 = new Person("wang wu",50);
  26.                 Person p4 = new Person("zhou liu",60);

  27.                 ArrayList a1 = new ArrayList();
  28.                 a1.add(p1);
  29.                 a1.add(p2);
  30.                 a1.add(p3);
  31.                 a1.add(p4);
  32.                
  33.                 for (Iterator it =a1.iterator();it.hasNext(); )
  34.                 {
  35.                         System.out.println(it.next());
  36.                 }
  37.         }
  38. }
复制代码
  1. /*
  2.         实例二:
  3. */
  4. import java.util.*;
  5. class  CollectionDemo2
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 ArrayList a2 = new ArrayList();
  10.                 a2.add("java5");
  11.                 a2.add("java6");
  12.                 a2.add("java7");
  13.                 a2.add("java8");
  14.                 a2.add("java9");

  15.                 for (Iterator it = a2.iterator();it.hasNext(); )
  16.                 {
  17.                         System.out.println(it.next());
  18.                 }
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

5 个回复

倒序浏览
你这个问题,问的很好,首先Iterator用法就不说了。
在这里我推荐你看下泛型的概念,如果理解了泛型,这道题,也就不攻自破了。
简单说一下,Iterator<E> 其中的<E>  就代表泛型。意思就是遍历指定的类型对象。
E  it.next()  它返回也是E,就是说它返回的是调用该对象的类型。
实例一:返回的是Person对象。  
实例二:返回的是字符串。
所以打印结果不一样,继续看看毕老师的视频吧,你会慢慢理解哈希值的概念。
回复 使用道具 举报
王--明 发表于 2012-2-29 10:02
你这个问题,问的很好,首先Iterator用法就不说了。
在这里我推荐你看下泛型的概念,如果理解了泛型,这道 ...

不好意思,还没学到泛型,呵呵。
刚到集合。自己试着弄了下,出来了哈希值,不知道怎么回事了。
谢谢了!
回复 使用道具 举报
第一个输出的是对象,第二个输出的是字符串,要想输出对象的内容,应该在Person类中覆写public String toString()方法
回复 使用道具 举报
输出对象的哈希值其实是它的toString方法的输出结果啊,可以看下源码或者API,
因此如果想按照自己的想法打印出人名和年龄,,只需要重写一下该类的toString方法
回复 使用道具 举报
两个实例里集合中存储的对象类型不同:
实例一里存储的是Person对象,而实例二里存储的是字符串
你可以查一下API, 在你的输出语句 System.out.println(it.next());中, it.next()的返回值类型是Object
所以这时候打印的仍然是集合里的每一个对象,和单独打印他们一样的,结果显示的都是哈希码.



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马