黑马程序员技术交流社区
标题:
这样的打印结果很头疼(关于对象和引用)
[打印本页]
作者:
明月几时有
时间:
2013-11-6 21:32
标题:
这样的打印结果很头疼(关于对象和引用)
public class Person {//默认的修饰符,在包与包之间访问,可以达到封装的效果
private String name;
private int age;
public Person(){}
public Person(String name, int age) { //在另一个包中使用本类的构造方法,需要让构造方法的权限修饰符是public的
this.name = name;
this.age = age;
}
public String toString() {
return "我的名字:" + name + ",我的年龄是:" + age ;
}
}
package com.baidu;
import cn.itcast.Person; //导入包,其实是导入包中的类
//import cn.itcast.*; //星式导入,是让导入的包中所有的类对本类可见
class Demo6_Pack {
public static void main(String[] args) {
Person p1 = new Person("小王",19);
Person p2 = new Person("小李",20);
System.out.println(p1); //我的问题在这里,这里打印结果是 我的名字是小王,我的年龄是19,为什么传入的是类的引用p1,打印出来的不是一个地址值?
System.out.println(p2); //我觉得这里应该把 p1改成 p1.toString 才对啊,当然我的想法肯定是错的,但是就是想不明白。
}
}
复制代码
作者:
麦者
时间:
2013-11-6 21:57
本帖最后由 麦者 于 2013-11-6 22:02 编辑
当调用println(p1)的时候,触发的是println(p1.valueOf),valueOf接收的参数是Object返回的是String,函数如下:public static String valueOf(Object obj)返回 Object 参数的字符串表示形式。
参数:
obj - 一个 Object。
返回:
如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
另请参见:
Object.toString(),这就是为什么你打印出来的是:我的名字是小王,我的年龄是19,的原因。
作者:
魏-玉-彪
时间:
2013-11-6 23:23
本帖最后由 魏-玉-彪 于 2013-11-6 23:42 编辑
public
class Person {//默认的修饰符,在包与包之间访问,可以达到封装的效果
private String name;
private int age;
public Person(){}
public Person(String name, int age) { //在另一个包中使用本类的构造方法,需要让构造方法的权限修饰符是public的
this.name = name;
this.age = age;
}
public String toString() {
return "我的名字:" + this.name + ",我的年龄是:" + this.age ;
}
}
//package com.baidu;
import cn.itcast.Person; //导入包,其实是导入包中的类
import cn.itcast.*; //星式导入,是让导入的包中所有的类对本类可见
class Demo6_Pack {
public static void main(String[] args) {
Person p1 = new Person("小王",19);
Person p2 = new Person("小李",20);
System.out.println(p1); //我的问题在这里,这里打印结果是 我的名字是小王,我的年龄是19,为什么传入的是类的引用p1,打印出来的不是一个地址值?
System.out.println(p2); //我觉得这里应该把 p1改成 p1.toString 才对啊,当然我的想法肯定是错的,但是就是想不明白。
}
}
复制代码
我的名字:小王,我的年龄是:19
我的名字:小李,我的年龄是:20
请按任意键继续. . .
Person类已经重写toString();方法
,系统自动调用,所以不用再明确调用
作者:
起猿
时间:
2013-11-7 00:05
亲,你这个很明显你已经重写toString方法了,而输入时,默认是调用toString()的。所以你带不带这个方法,输入的都一样,如果你不重写。那么调用的就是object中的toString方法。那时打印的就是地址值了。
作者:
明月几时有
时间:
2013-11-7 10:31
谢谢你们,我懂了^_^
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2