黑马程序员技术交流社区

标题: 使用hashMap练习输出对象,打印出hash字节码。如何像视频教程一样打印出对象。 [打印本页]

作者: winkyqin    时间: 2014-10-24 19:47
标题: 使用hashMap练习输出对象,打印出hash字节码。如何像视频教程一样打印出对象。
//实现了Compareble的学生类,并重写了compareTo方法。
public class Student implements Comparable<Student> {
        private String name;
        private int    age;
       
        public Student(String name, int age) {
                this.name = name;
                this.age = age;
        }
       
        public int hashCode(){
                return this.name.hashCode()+this.age*34;
        }
       
        //如果哈希地址相同判断对象的内存地址是否相同..
        public boolean equals(Object obj){
                if(!(obj instanceof Student)){
                        throw new ClassCastException("类型不匹配");
                }
                Student student = (Student) obj;
                return (this.name.equals(student.name)) && (this.age==(student.age));
        }
       
        public String toString(Student student){
                return this.name+"==="+this.age;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }

        @Override
        public int compareTo(Student student) {
               
                int num = new Integer(this.age).compareTo(student.age);
                if (num == 0){
                        return this.name.compareTo(student.name);
                }
                return num;
        }
}

public class HashSetDemo04 {
        public static void main(String args[]){
                Map<Student,String> map = new HashMap<Student,String>();
                map.put(new Student("win12",12), "shanghai");
                map.put(new Student("win11",11), "shenzhen");
                map.put(new Student("win14",14), "wuhan");
                map.put(new Student("win16",16), "nanchang");
               
                Set<Student> key = map.keySet();
                Iterator<Student> it = key.iterator();
               
                while(it.hasNext()){
                        Student key2 = it.next();
                        System.out.println(key2.toString()+"-===="+map.get(key2));
                }
        }
}
实际打印结果为:
com.heima.collection.Map.Student@6be4c95-====shanghai
com.heima.collection.Map.Student@6be4d21-====nanchang
com.heima.collection.Map.Student@6be4c72-====shenzhen
com.heima.collection.Map.Student@6be4cdb-====wuhan

我想要的打印结果是输出类对象而不是hash字节码!!!
作者: 李春江    时间: 2014-10-25 20:40
本帖最后由 李春江 于 2014-10-25 20:42 编辑

你好,你打印的当然是地址了,因为你没有覆盖public String toString()方法;
你写的是带参数的:
public String toString(Student student){
                return this.name+"==="+this.age;
        }
所以没有覆盖父类Object的toString方法;
解决办法:去掉括号里的形参就OK
作者: dreamseekerkun    时间: 2014-10-25 22:23
楼上正解,你这属于函数重载而不是重写




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