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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彪悍不朽 中级黑马   /  2016-8-28 22:59  /  734 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Person
{        private String name;
        private int age;
        public Person(String name,int age){
                this.name=name;
                this.age=age;
        }
        public String toString(){
                return "姓名:"+name+" "+"年龄"+age;
        }
}
class Demo
{
        public static void main(String[] args)
        {        Person per=new Person("张三",30);
                System.out.println(per);
        }
}
打印结果:姓名:张三 年龄30

class Person
{        private String name;
        private int age;
        public Person(String name,int age){
                this.name=name;
                this.age=age;
        }
}
class Demo
{
        public static void main(String[] args)
        {        Person per=new Person("张三",30);
                System.out.println(per);
        }
}
如果没有覆写toString()方法,打印结果为Person@193a55
问题:如果覆写了toString()方法,打印对象时,是否默认调用toString()方法;如果没有覆写,打印对象时,是否打印对象地址?(Person@193a55 貌似是地址),    求:什么时候必须调用toString()方法,如:xx.toString(),什么时候可以不必调用toString()方法?

7 个回复

倒序浏览
哎,没人回,真可怜。
回复 使用道具 举报
本帖最后由 水月灬清影 于 2016-8-29 11:15 编辑

如果没重写toString()方法,直接输出对象名就是地址值(应该说是一串无意义的哈希值),重写了,就输出成员变量值,另外多说一句,toString()的重写不用自己做,可以自动生成。
但是,一般成员变量要私有,用公用的setXxx(),getXxx()方法来设置和获取成员变量的值,而不用toString()方法直接输出。
回复 使用道具 举报 1 0
好的,谢谢大神!
回复 使用道具 举报
不论你是否覆写了toString()方法,打印对象都是调用toString()方法,打印出地址值的缘故是因为Object类里的toString()方法就是这个效果。没有覆写就调用从Object继承的toString()方法
回复 使用道具 举报
哦,我知道了,谢谢!
回复 使用道具 举报
看你的类有没有重写toString方法,如果你重写了,就直接掉,否则就是地址值,如果你用的类Java已经提供了toString方法,就不要重写,输出的时候也不用直接掉,会默认调toString方法,比如String类,Java就已经提供了toString方法;但是Java重写的格式不大好看,你也可以自己重写下,这样也比较清楚
回复 使用道具 举报
好的,谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马