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" |