黑马程序员技术交流社区
标题:
关于toString()的疑惑
[打印本页]
作者:
马伟恒
时间:
2012-4-14 11:16
标题:
关于toString()的疑惑
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.setName(name);
this.setAge(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;
}
public String toString() {
return "姓名:"+this.name+",年龄:"+this.age;
}
}
public class ObjectDemo01 {
public static void main(String[] args) {
Person p1=new Person("张三",11);
Person p2=new Person("张三",11);
System.out.println(p1);//很奇怪,这样就自动调用覆写过的toString()方法 了
System.out.println(p2);
System.out.println(p1.equals(p2));//应该是比较地址内容,结果为false,但这样,它就不再调用toString()方法 了,不是说打印对象 会自动调用toString()方法 吗?那这行代码为什么不再调用 了呢?
System.out.println(p1.toString().equals(p2.toString()));//比较内容,结果true
}
}
作者:
张锐
时间:
2012-4-14 11:20
对象才有toString方法,基本类型哪里来的toString方法
作者:
张卯
时间:
2012-4-14 11:24
toSting()是Object类的方法,所有对象都会继承Object,所以所有对象都有这个方法,你复写了就会调用复写之后的方法。
System.out.println(p1);//很奇怪,这样就自动调用覆写过的toString()方法 了
你这里打印的是对象,所以自动调用toString()
System.out.println(p2);
System.out.println(p1.equals(p2));//应该是比较地址内容,结果为false,但这样,它就不再调用toString()方法 了,不是说打印对象 会自动调用toString()方法 吗?那这行代码为什么不再调用 了呢?
你这里打印的是boolean返回类型的值,不是对象,所以不调用toString()
作者:
刘占月
时间:
2012-4-14 11:38
toString(T) 返回该对象的字符串表示。T必须是一个对象。
System.out.println(p1) 这默认调用的toString()方法。
System.out.println(p1.equals(p2)) 这里不是对象,肯定不会调用的。 而且你在上面new的两个对象。他们的内存地址肯定不同的。所以为false
作者:
陈坚
时间:
2012-4-14 11:56
toSting(),和equals()方法都是object类的方法,toSting()返回代表该对象值的字符串,Object类中返回的字符串形式是类名@内存地址的十六制整数。equals()方法在object类中通过判断两个对象是否指向同一块内存区域来判断是否相等,而楼主没有对equals()方法的重写,所以System.out.println(p1.equals(p2));只是比较两个对象的所指向的内存地址是否相同,所以为false;
作者:
孙国军
时间:
2012-4-14 12:44
System.out.println(p1.equals(p2));//应该是比较地址内容,结果为false,但这样,它就不再调用toString()方法 了,不是说打印对象 会自动调用toString()方法 吗?那这行代码为什么不再调用 了呢?
它不是不调用,你首先要p1.equals(p2)返回的是一个boolean类型的数据,当然调用的是Object类中的toString()方法后,它返回的是调用者boolean变量flase的一个字符串表现形式,打印的flase实际上是"false";
System.out.println(p1.toString().equals(p2.toString()));//比较内容,结果true
这里调用的toString()方法的是Person类中的p1,p2对象,调用过后,返回的值是一个String类型的字符串,而p1,p2的内容相同,是"("张三",11)"所以得到的String类型的字符串也是相同的,他们只是后使用.equals(()方法就不是比较地址值了,因为这个.equals(()的调用者是两个String类对象---字符串;而得到的值也就是true,所以最后打印的结果为"true"
作者:
孙国军
时间:
2012-4-14 12:46
补充一点,String类中重写了equals()方法,具体的你可以查API文档
作者:
蒋亮
时间:
2012-4-14 15:37
p1.equals(p2)返回的是一个boolean类型的值,是基本数据类型,toString()方法是Object类的方法,所以你打印对象的时候会自动调用toString()方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2