java数栈_java – 什么是操作数栈?

它是各种各样的字节码操作如何获得他们的输入,以及他们如何提供他们的输出。

例如,考虑iadd操作,它将两个int添加在一起。要使用它,你在堆栈上推两个值,然后使用它:

iload_0 # Push the value from local variable 0 onto the stack

iload_1 # Push the value from local variable 1 onto the stack

iadd # Pops those off the stack, adds them, and pushes the result

现在栈上的顶值是这两个局部变量的总和。下一个操作可能需要顶层栈值,并将其存储在某个地方,或者我们可能在堆栈中推送另一个值来执行其他操作。

假设要将三个值添加在一起。堆栈使这很容易:

iload_0 # Push the value from local variable 0 onto the stack

iload_1 # Push the value from local variable 1 onto the stack

iadd # Pops those off the stack, adds them, and pushes the result

iload_2 # Push the value from local variable 2 onto the stack

iadd # Pops those off the stack, adds them, and pushes the result

现在栈上的顶值是将这三个局部变量相加在一起的结果。

让我们更详细地看看第二个例子:

我们假设:

>堆栈是空的开始(这几乎从来没有真正的,但我们不关心它在我们开始之前)

>局部变量0包含27

>局部变量1包含10

>局部变量2包含5

所以最初:

+-------+

| stack |

+-------+

+-------+

然后我们做

iload_0 # Push the value from local variable 0 onto the stack

现在我们有

+-------+

| stack |

+-------+

| 27 |

+-------+

下一个

iload_1 # Push the value from local variable 1 onto the stack

+-------+

| stack |

+-------+

| 10 |

| 27 |

+-------+

现在我们做添加:

iadd # Pops those off the stack, adds them, and pushes the result

它“弹出”10和27离开堆栈,将它们加在一起,并推送结果(37)。现在我们有:

+-------+

| stack |

+-------+

| 37 |

+-------+

第三个时间:

iload_2 # Push the value from local variable 2 onto the stack

+-------+

| stack |

+-------+

| 5 |

| 37 |

+-------+

我们做第二个iadd:

iadd # Pops those off the stack, adds them, and pushes the result

这给了我们:

+-------+

| stack |

+-------+

| 42 |

+-------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值