初学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指向的空间,这里我就不明白了,为什么,
还望各位指教
int i = 3;
i = 4; //为什么这里不写int?能明白么?因为i已经定义了。
或者说int i = 3;其实是如下两行
int i; //在此之前不知道什么是i,需要定义
i = 3;//赋值
用了new都是分配了空间。
哦哦,多谢,
还有关于一个引用的问题,为什么a原来指向的会作废呢
还有后来为什么a1的指向是原来a的呢
a不可能同时指向两个空间,它指向第二个,那么就和第一个没关系了。那么第一个是否“作废”呢?这个不一定,要看有没有别的变量指向它,如果都没有了,才“作废”。
比如
A a = new A();
a = new A(); //此时第一个“作废”了。
再比如
A a = new A();
A a1 = a; //此时2个引用指向一个空间
a = new A(); //此时a1还是指向上一个,a指向新的,那么两个空间都有效。
a1 = a; //此时第一个空间“作废”。
“作废”的判断标准是,没有任何对象指向它了。为什么a1还指向a,因为a1没有改过
看如下代码:
int a = 1;
int a1 = a;
a = 2;
//此时为什么a1还是1???
A a 在栈里边声明了一下 =new A();在堆里边开辟了一块内存
A a1=a; 在栈里边声明了 a1=a; 声明了两个变量(a,a1)
a= new A ; 在堆里边开辟了新的内存, 由于a1=a;变量名相同,所以就指向了新的内存地址,原来的就作废了(比如说:你10年前买的房子,现在想盖一座新的房子,是不是把原来的房子拆掉,新的房子才能建起来。旧房子就是第一个地址,新房子就是新开辟的地址。)