我有一个理解Java中堆栈内存功能的问题。 根据我的老师,以下方法会在堆栈内存中创建2个基本类型局部变量。为什么我可以访问堆栈中的非“最后进入”变量?
private void test()
{
int x = 0; //created in stack
int y = 1; //created in stack
}
由于槽定义stackmemory是“后进先出”我不明白这应该如何工作。 我可以访问“x”,它绝对不是变量,它是堆栈内存中的“最后一个”。
private void test()
{
int x = 0; //created in stack
int y = 1; //created in stack
x = 15; //x is not last in (y is last in)!
}
有人可以解释我,我在想什么?
此“堆栈”不适用于在同一方法中声明的变量 - 它们全部位于相同的*堆栈帧*中。如果从'test'调用另一个方法:这是另一个栈帧被压入堆栈的地方。 – laune
http://stackoverflow.com/questions/19433523/where-is-thread-object-created-stack-or-heap - 这个线程会给你很好的理解执行模型 – user1428716
你混淆了你的堆栈,开发者,推送和弹出值,以及由JVM管理的调用堆栈。如果你看看生成的字节码,你可能会有更好的理解。 –