当你不断创建一个对象时,是堆先填满还是栈先填满?

问题描述 投票:0回答:1

我有一个学生班:

public String name;
public String surname;
public int age;

我有变量并且创建了对象:

public Student s = new Student (); 

此外,在我的 Main 方法中,

Student s = new Student ();
我创建了该对象。为什么运行此代码时会出现 StackOverflowError?既然我在这里不断创建对象,那么我不需要先填充Heap内存吗?

Exception in thread "main" java.lang.StackOverflowError
    at Student.<init>(Student.java:6)
    at Student.<init>(Student.java:6)
    at Student.<init>(Student.java:6)
    at Student.<init>(Student.java:6)
java heap-memory stack-overflow
1个回答
0
投票

您可能正在填充堆栈,但没有填充对象。它充满了对构造函数的调用,因为每次创建 Student 实例时,它都会尝试为 member s 创建一个额外的新实例,该实例也尝试创建另一个实例,等等。这相当于无限递归调用,正如预期的那样,最终会导致堆栈溢出。

© www.soinside.com 2019 - 2024. All rights reserved.