for循环中new出同名对象的问题。。。。。求高人解答!!! class A { private int a; public A(int a) { this.a = a; } } public class Text { public static void main(String args[]) { for(int i=1; i<=10; i++) { A aa = new A(i); } } }
package Char06;
class A {
private int a;
public A(int a) {
this.a = a;
}
public int getA(){
return this.a;
}
public void finalize() throws Throwable{
System.out.println("对象被释放"+this.getA());
}
};
public class Text {
public static void main(String args[]) {
A aa = null;
for (int i = 1; i <= 10; i++) {
aa = new A(i);
}
System.gc();
}
}
------解决方案-------------------- 楼主,你该了解下什么叫引用,什么叫对象 ,还有对象的生命周期 你现在一点概念都没有
------解决方案-------------------- aa是局部变量,只是保存了A对象的一个实例的引用而已! 当aa离开作用域就不存在了,假设垃圾回收器没有运行的话,之前new出来的对象是在堆内存中的 只是程序中没有对它的直接或者间接引用,就是对A的实例没有可见性!
------解决方案-------------------- LZ要知道的变量的作用域
------解决方案--------------------
------解决方案-------------------- 变量,不是对象,变量并没有同名,只是对象建立了多个,回收了对象。
------解决方案-------------------- 个人感觉是这样的: 一 首先要理解 A aa = new A(1);的含义,这句话包含的三个步骤 1. 首先 new A(i) ,代表 在堆中产生一个A的对象(没有名字) 2. A aa 是在栈中 产生一个引用 3. 将aa 指向 堆中的 1步骤中产生的对象。