黑马程序员技术交流社区
标题:
this调用本类中其他函数的问题?
[打印本页]
作者:
张青峰
时间:
2012-2-5 19:29
标题:
this调用本类中其他函数的问题?
本帖最后由 张青峰 于 2012-2-8 18:09 编辑
我是新学徒,写了这样一个程序:
public class Person{
String name;
int age;
public Person(){
}
public Person(String name){
System.out.print(this.name = name+" ");
}
public Person(String name,int age){
this(name);
System.out.println( this.age = age);
}
public static void main(String[] args){
Person p = new Person("张三",12);
System.out.println(p);
}
}
程序的运行结果是:
张三 12
Person@de6ced
Person@de6ced 这个是什么意思?
作者:
刘峰
时间:
2012-2-5 19:36
Person@de6ced 是你打印的对象的地址值,this代表的是当前对象的引用 this(name)就带表调用对象参数为 (String name) 这个构造函数。
作者:
黑马唐浩
时间:
2012-2-5 20:02
本帖最后由 黑马唐浩 于 2012-2-5 20:03 编辑
我的理解是你的Person类调用的构造方法和
public Person(String name,int age)
{
this. name = name;
this.age = age;
}
复制代码
功能是一样的,只是在构造方法调用的时候先调用了Person(String name)和Person(int age)两个构造方法,程序结果张三和12也是在调用上述两个Person构造方法时执行的打印语句。
程序结果Person@de6ced是因为你没有重写Object类的toString()方法造成的。
如果没有重写object的toString方法,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode()).
我觉得是这样,希望能帮到你
作者:
张青峰
时间:
2012-2-5 20:11
为什么会有这个输出 呢 Person@de6ced
作者:
张青峰
时间:
2012-2-5 20:13
哦 原来如此 谢谢
作者:
王文龙
时间:
2012-2-5 20:37
同学,
我想还是在提问题前多看看其他同学的问题,
有好多都是重复的.
作者:
魏腾飞
时间:
2012-2-5 20:46
我看了一下,最后这个p实际上是实例化的对象,存在于堆内存中(含有很多内容如age、name等)等同于一个数组吧。在直接输出时P时相当于直接输出数组名,所以出现了Person@de6ced。
作者:
彭沛东
时间:
2012-2-5 21:41
打印的是指向对象在内存中的地址。
作者:
易伟
时间:
2012-2-5 23:10
p是一个引用变量,存放的是你实例对象存放在堆内存中的地址值,这样p就指向了这个对象。
作者:
秦碧
时间:
2012-2-6 00:03
p为引用型变量,若打印 期打印结果为
p所引用的类的类名@p所指对象的十六进制地址
作者:
黑夜里的白猫
时间:
2013-5-22 16:19
你认真看看 毕向东老师的视频的话,应该很容易找出答案的。
Person p=new Person();
主函数在栈内存中开辟一块空间,并且定义了一个p变量,
= 右边,是在堆内存中开辟了一个空间用来存放对象,
而对象又是一个实体,
在堆内存中 每一个实体都有一个地址值,
将这个地址值给p之后,就可以通过p的值来找到这个对象,
你说的那个Person@de6ced就是地址值了;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2