黑马程序员技术交流社区

标题: 为什么打印的人名是内存地址值,不是人名? [打印本页]

作者: 程志远    时间: 2015-4-11 23:36
标题: 为什么打印的人名是内存地址值,不是人名?
  1. import java.util.*;
  2. class Student implements Comparable<Student>
  3. {
  4.         private String name;
  5.         private int age;
  6.         Student(String name, int age)
  7.         {
  8.                 this.name = name;
  9.                 this.age = age;

  10.         }
  11.         public int compareTo(Student s)
  12.         {
  13.                 int num = new Integer(this.age).compareTo(new Integer(s.age));
  14.                 if(num==0)
  15.                         return this.name.compareTo(s.name);
  16.                 return num;
  17.         }
  18.         public int hashCode()
  19.         {
  20.                 return name.hashCode()+age*34;

  21.         }
  22.         public boolean equals(Object obj)
  23.         {
  24.                 if(!(obj instanceof Student))
  25.                         throw new ClassCastException("类型不匹配");
  26.                 Student s = (Student)obj;
  27.                 return this.name.equals(s.name) && this.age==s.age;
  28.         }

  29.         public String getName()
  30.         {
  31.                 return name;
  32.         }
  33.         public int getAge()
  34.         {
  35.                 return age;
  36.        
  37.         }
  38.         public String toSting()
  39.         {
  40.                 return name+":"+ age;
  41.         }
  42. }
  43. class  MapTest
  44. {
  45.         public static void main(String[] args)
  46.         {
  47.                 HashMap<Student,String> hm = new HashMap<Student, String>();
  48.                  
  49.                  hm.put(new Student("lisi1",21),"beijing");
  50.                  hm.put(new Student("lisi2",22),"nanjing");
  51.                  hm.put(new Student("lisi3",23),"nanjing");
  52.                  hm.put(new Student("lisi4",24),"wuhan");
  53.                 //第一种取出方式
  54.                 Set<Student> keySet = hm.keySet();
  55.                 Iterator<Student> it = keySet.iterator();
  56.                 while(it.hasNext())
  57.                 {
  58.                         Student stu = it.next();
  59.                         String addr = hm.get(stu);
  60.                         System.out.println(stu+".."+addr);

  61.                 }


  62.                 /*        //第二种取出方式 entrySet
  63.                         Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
  64.                         Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();

  65.                         while (it.hasNext())
  66.                         {
  67.                                 Map.Entry<Student,String> me = iter.next();
  68.                                 Student stu = me.getKey();
  69.                                 String addr = me.getValue();
  70.                                 System.out.println(stu+"....."+addr);

  71.                         }*/
  72.                
  73.         }
  74. }
  75. [img]捕获.PNG1.PN[/img]
复制代码

作者: waylent    时间: 2015-4-11 23:45
Student里的toString()方法拼错了
作者: 殷俊    时间: 2015-4-11 23:46
不能直接打印人名,因为键里面是两个参数,计算机又不知道你要打印哪个,因此你要指定,比如stu.getName();




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