Java:【局部变量】与【局部变量表】

在知乎看到一篇专栏文章,原文地址:https://zhuanlan.zhihu.com/p/...

我对作者的描述持怀疑态度,我认为 age 与 weight 会分别占用局部变量表中不同的 Slot,而且 Slot 中会直接存储 50,也就是说 50 会存两份,而非文中所说的去栈中查找字面量值为50的内容,栈中怎么会存储字面量呢?存在哪里?

阅读 2.6k
3 个回答

直接写一个测试类,编译一下,javap -verbose 看一下就知道你是对的了
这个文章完全扯淡,基本类型变量自己就保存值,拿来的地址一说……
如果是字符串还可以理解,两个相同的字面量共享同一个字符串常量对象

依据我所了解的作答
image.png
c,d 索引位置不同,不使用同一个插槽,而 a,d使用同一个插槽。

比如下边的代码

public class test {
    public static void main(String[] args) {
        int a = 50;
        int weight = 50;
        int grade = 1;
    }
}

main方法对应的字节码:

 bipush 50  //将50压入栈中
 istore_1   //将当前栈顶元素放入局部变量表中索引1的未知
 bipush 50
 istore_2
 iconst_1
 istore_3
 return

50这个值是在代码中的。 a这个变量对应本地变量表中索引为1的位置。

而且有个很重要的点,本地变量表中某个位置不一定一直对应某个变量,可以对应多个变量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏