2 u010775468 u010775468 于 2016.04.17 23:40 提问

java中的引用和new的用法

初学java,有些问题很幼稚,还望各位大神能多扶持
首先,说说引用的问题,
我定义了一个A类。其中初始化属性name为A,
接下来:
A a = new A;//创建一个对象
A a1 = a;//这里好像是一个引用,有点不懂,我把他理解为指针,
a = new A; // 这是第二个问题,在创建对象的时候,一般不都是类 对象 = new 类吗?为什么这里可以直接new呢,而且看教程上是说又新分配了一个空间,我想问的是只要是new,都是分配存储空间吗,及即使不创建对象
//
还有补充一点,在第三行代码中,由于是新分配了一个空间,第一二条代码相当于a1指向原来a指向的空间,然后后来a又指向了一个新的内存,在这个时候,a指向了两个存储空间,教程上说a指向原来的空间这就作废了,然后这时,a1指向了两个空间,
教程上说这时a1指向了原来a指向的空间,这里我就不明白了,为什么,
还望各位指教

6个回答

caozhy
caozhy   Ds   Rxr 2016.04.17 23:44
已采纳

int i = 3;
i = 4; //为什么这里不写int?能明白么?因为i已经定义了。

或者说int i = 3;其实是如下两行
int i; //在此之前不知道什么是i,需要定义
i = 3;//赋值

用了new都是分配了空间。

caozhy
caozhy 回复键盘手C: 问题解决请点下我回答右边的采纳,谢谢
一年多之前 回复
u010775468
u010775468 谢谢啊,刚才在打问题,没有刷出来你的回答,现在清楚了,谢谢啊,
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.04.17 23:47

a不可能同时指向两个空间,它指向第二个,那么就和第一个没关系了。那么第一个是否“作废”呢?这个不一定,要看有没有别的变量指向它,如果都没有了,才“作废”。
比如
A a = new A();
a = new A(); //此时第一个“作废”了。
再比如
A a = new A();
A a1 = a; //此时2个引用指向一个空间
a = new A(); //此时a1还是指向上一个,a指向新的,那么两个空间都有效。
a1 = a; //此时第一个空间“作废”。

u010775468
u010775468 谢谢,已经清楚了
一年多之前 回复
u010775468
u010775468   2016.04.17 23:47

哦哦,多谢,
还有关于一个引用的问题,为什么a原来指向的会作废呢
还有后来为什么a1的指向是原来a的呢

caozhy
caozhy   Ds   Rxr 2016.04.17 23:53

“作废”的判断标准是,没有任何对象指向它了。为什么a1还指向a,因为a1没有改过

看如下代码:
int a = 1;
int a1 = a;
a = 2;
//此时为什么a1还是1???

sinat_30742169
sinat_30742169   2016.04.17 23:57

A a 在栈里边声明了一下 =new A();在堆里边开辟了一块内存
A a1=a; 在栈里边声明了 a1=a; 声明了两个变量(a,a1)
a= new A ; 在堆里边开辟了新的内存, 由于a1=a;变量名相同,所以就指向了新的内存地址,原来的就作废了(比如说:你10年前买的房子,现在想盖一座新的房子,是不是把原来的房子拆掉,新的房子才能建起来。旧房子就是第一个地址,新房子就是新开辟的地址。)

CSDNXIAOD
CSDNXIAOD   2016.04.17 23:52

new一些鲜为人知的用法!
遵循placement new的用法规范(zz)
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!