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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乐凡 初级黑马   /  2012-8-20 16:25  /  1364 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast;

public class Student {
        private String name;
        private int 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 String toString() {
                // TODO Auto-generated method stub
                return "name:"+name+"age:"+age;
        }
}
package cn.itcast;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class Map {
        public static void main(String[] args) {
                HashMap<Integer,Student> hm = new HashMap<Integer,Student>();
               
                Student s1 = new Student();
                s1.setName("张惠妹");
                s1.setAge(20);
                Student s2 = new Student();
                s2.setName("张惠妹");
                s2.setAge(20);
                Student s3 = new Student();
                s3.setName("张惠妹");
                s3.setAge(20);
                hm.put(1, s1);
                hm.put(2, s2);
                hm.put(3, s3);
                System.out.println(hm);//我在Student类里重写了toString方法,为什么hm对象不用调用此方法,这个方法就直接应用了啊,不应该是(hm.toString)吗?这里不解啊  求高手相助!
               
               
        }
}

2 个回复

倒序浏览
因为,打印语句中,hm是默认调用的toString方法。所以直接就显示了。
回复 使用道具 举报
本帖最后由 王少岩 于 2012-8-20 16:46 编辑

println()的源码:
PrintStream(System.out):
    public void println(Object x) {
        String s = String.valueOf(x);//调用String.valueOf(obj)方法
        synchronized (this) {
            print(s);
            newLine();
        }
    }

String:
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();//如果obj不为空的话,调用object类的toString()方法
    }

Object:
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
楼主代码中覆盖了toString方法,所以调用的是覆盖后的toString方法,打印的结果就是toString方法的返回结果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马