输入输出、方法调用和栈帧

Input and output, method call and stack frame

我正在学习输入和输出,我对这个问题不太确定:

public static int foo(x) {
return 2*x;
}

假设堆栈在 foo 的入口处包含以下值,从下到上,从左到右阅读:

1 2 3

所以 3 在上面,1 在下面。

foo returns 之后,堆栈是 1 2 6 还是 6 2 1? 我认为该方法会首先将值放在顶部,然后 return 将值再次放在堆栈顶部。

很可能,您谈论的是 Java 虚拟机内部使用的堆栈(如 The JVM Specification, Java Virtual Machine Stacks 中所定义。大多数现代编程语言中都存在非常相似的概念。

你的假设是正确的,方法调用和返回是在栈顶完成的。所以,1 2 3 变成了 1 2 6(这就是为什么它被称为堆栈,很难在一些深埋的位置操作它)。