这个是不是一样的

来源:百度知道 编辑:UC知道 时间:2024/05/28 15:08:06
class a
{ a A =new a();
a()
{
}
void c()
{
}
}
class b
{
a B; //是不是就是a B=new a();相当与创建了一个对象呢

void f()
{
a.c();
}
}

不一样。
我认为你对这个问题的疑惑,首先还是来自你对“引用”和“对象”的认识还不够到位。

所谓“对象”,是指一个可以容纳数据的容器,因为它是容器,所以他有若干可以容纳多种数据类型的数据的成员变量。
而“引用”,是指一个可以代表某个对象的名称,他只是一个名称,他本身不具备存储数据或执行方法(函数)的能力。

打个比方:我是一个人,我就是个对象,我的名字叫张三,张三就是一个引用。当程序中出现张三这个标识符时,编译器就认为指的是我。但是我不一定肯定或永远叫张三,可能我成人后对我的名字不太满意,换了个名字,叫张国荣。这时张三或许指的又是别人了,或许当我换名字以后,没有任何人叫张三,这时通过张三打点的方法,就不能访问任何成员或函数。而这时要访问我的成员或函数应该找谁呢?——是的,就是张国荣。

从上面可以得出一个结论,引用和对象实际上是一种双向选择的关系,一个引用可能在不同的时候指向多个对象,而一个对象也可能同时被多个引用所指向。
如:
Dog d1 = new Dog();
Dog d2 = d1;
上面只创建了一个对象,而这个对象在被d1指向后,d2又指向了d1,也就是说d1在指向了一个狗类对象后又将这个对象的引用传给了d2,那么这个对象究竟现在是被谁所指向呢? 是d2吗?仅仅是d2吗?——答案是,d1和d2同时指向了这个对象。这并不矛盾,就像我们人可能有几个小名或外号一样。

下面我们再来看看代码
a A = new a();
这行代码的含义是:声明了一个指向a类对象的引用A,同时创建了一个a类对象,让引用A指向该对象
a B;
这行代码的含义是:声明了一个指向a类对象的引用B,仅此而已

如果你能完全理解以上的解说,我可以进一步告诉你实际的情况,以便于你理解记忆:
我们知道,对象就是一个可以存储若干个多种类型数据的东西,是数据就要存储,存储要存储空间。在程序运行时,这个存储的空间必然在内存中,使用new关键字的意义就是向计算机系统申请内存空间,这段空间里的数据就是对象,我们还知道任何存储空间都是有编号的,也就是内存地址,而表示该对象的地址就是首地址,但