黑马程序员技术交流社区
标题:
关于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