黑马程序员技术交流社区

标题: 关于toString()方法的疑问。 [打印本页]

作者: 彪悍不朽    时间: 2016-8-28 22:59
标题: 关于toString()方法的疑问。
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()方法?


作者: 彪悍不朽    时间: 2016-8-29 11:01
哎,没人回,真可怜。
作者: 水月灬清影    时间: 2016-8-29 11:12
本帖最后由 水月灬清影 于 2016-8-29 11:15 编辑

如果没重写toString()方法,直接输出对象名就是地址值(应该说是一串无意义的哈希值),重写了,就输出成员变量值,另外多说一句,toString()的重写不用自己做,可以自动生成。
但是,一般成员变量要私有,用公用的setXxx(),getXxx()方法来设置和获取成员变量的值,而不用toString()方法直接输出。
作者: 彪悍不朽    时间: 2016-8-29 11:16
好的,谢谢大神!
作者: 阿卜    时间: 2016-8-29 17:59
不论你是否覆写了toString()方法,打印对象都是调用toString()方法,打印出地址值的缘故是因为Object类里的toString()方法就是这个效果。没有覆写就调用从Object继承的toString()方法
作者: 彪悍不朽    时间: 2016-8-29 18:35
哦,我知道了,谢谢!
作者: 梦想的小草    时间: 2016-8-29 21:12
看你的类有没有重写toString方法,如果你重写了,就直接掉,否则就是地址值,如果你用的类Java已经提供了toString方法,就不要重写,输出的时候也不用直接掉,会默认调toString方法,比如String类,Java就已经提供了toString方法;但是Java重写的格式不大好看,你也可以自己重写下,这样也比较清楚
作者: 彪悍不朽    时间: 2016-8-30 21:17
好的,谢谢啦




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