public class A {
private int i;
private A a = new A();
public A() {
System.out.println(111);
}
public static void main(String[] args) {
A a = new A();
}
}
如上述代码,执行的时候会产生堆栈溢出.Exception in thread “main” java.lang.StackOverflowError,但是如果把A中的变量a换成static的变量则不会出现这个问题,
public class A {
private int i;
private static A a = new A();
public A() {
System.out.println(111);
}
public static void main(String[] args) {
A a = new A();
}
}
java类库中 java.lang.Boolean中就是这样做的!请问new A()时内存分配情况,还有a = new A(),他里面的成员变量是不是一直new下去啊? 对象的内存分配是在堆中完成的,而引用对象A的就是a是在栈中分配的内存,当你new A()时,会一直在栈中分配就是a,但每个变量a所指向的对象不相同,最终栈内存不够,报堆栈溢出…
发表评论