在java字节码中,"putfield“指令期望栈的顶部是一个值,栈的顶部-1是一个引用。为什么不是反过来呢?
这个问题在我的课堂笔记中被问到了,我找不到答案。
发布于 2013-04-05 21:42:44
顺序实际上并不重要,因为VM和编译器可以以任何一种方式轻松实现。但Sun选择让较低的参数出现在堆栈的较低位置。
您不仅可以在putfield中看到这一点,还可以在许多其他指令中看到这一点,例如数组加载和存储以及方法调用。它们都遵循相同的约定。我能想到的唯一解释是,这种方式更直观。
如果从下到上按从左到右的顺序读出堆栈,那么堆栈上的参数将与方法签名或原始源代码中的参数具有相同的顺序。如果你想以另一种方式来做,程序员将不得不在心理上将堆栈视为颠倒的,这并不是什么大问题,但可能不那么直观。
https://stackoverflow.com/questions/15827930
复制相似问题