我最近开始使用Eclipse进行Android开发。通过代码调试时,我注意到一个奇怪的行为(至少与Visual Studio相比):在函数中间点击return语句后,它不会立即返回,而是始终跳转到最后一个return语句。例如:

String getTest(int i){
  if (i == 0)
     return "0";
  return "-1";
}

给定i = 0,在命中第一个return语句后,它会跳到下一个return语句,而不是退出此函数。但是,它确实返回“0”,而不是“-1”。那么,为什么要执行此虚拟步骤呢?这让我感到困惑。有人可以解释为什么吗?

最佳答案

这与从功能中确切构成“返回”有关。尽管这取决于平台,但返回通常必须:

  • 将返回代码复制到众所周知的寄存器(x86中为EAX)
  • 从激活记录堆栈
  • 中弹出返回地址
  • 重置堆栈指针(和基本指针)

  • 只有返回值不同,编译器可以选择一次生成机器代码(在Java中为字节码),然后从不同的位置跳转到机器代码。 Eclipse可能显示出这种跳跃。

    10-05 21:00
    查看更多