gpt4 book ai didi

java - Java原语是在堆栈还是堆上?

转载 作者:IT老高 更新时间:2023-10-28 20:24:53 26 4
gpt4 key购买 nike

我只知道非原始(对象)在堆上,方法在栈上,但是原始变量呢?

--更新

根据答案,我可以说堆可以有一个给定对象的新堆栈和堆?鉴于该对象将具有原始变量和引用变量..?

最佳答案

本地定义的基元将在堆栈上。但是,如果将原语定义为对象实例的一部分,则该原语将在堆上。

public class Test {
private static class HeapClass {
public int y; // When an instance of HeapClass is allocated, this will be on the heap.
}
public static void main(String[] args) {
int x=1; // This is on the stack.
}
}

关于更新:

对象没有自己的堆栈。在我的示例中,int y 实际上是每个 HeapClass 实例的一部分。每当分配 HeapClass 的实例时(例如 new Test.HeapClass()),HeapClass 的所有成员变量都会添加到堆中。因此,由于 HeapClass 的实例在堆上分配,int y 将作为 HeapClass 实例的一部分在堆上。

但是,在任何方法的主体中声明的所有原始变量都将在堆栈上

正如您在上面的示例中看到的,int x 在堆栈上,因为它是在方法体中声明的——而不是作为类的成员。

关于java - Java原语是在堆栈还是堆上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com