在知乎看到一篇专栏文章,原文地址:https://zhuanlan.zhihu.com/p/...
我对作者的描述持怀疑态度,我认为 age 与 weight 会分别占用局部变量表中不同的 Slot,而且 Slot 中会直接存储 50,也就是说 50 会存两份,而非文中所说的去栈中查找字面量值为50的内容,栈中怎么会存储字面量呢?存在哪里?
在知乎看到一篇专栏文章,原文地址:https://zhuanlan.zhihu.com/p/...
我对作者的描述持怀疑态度,我认为 age 与 weight 会分别占用局部变量表中不同的 Slot,而且 Slot 中会直接存储 50,也就是说 50 会存两份,而非文中所说的去栈中查找字面量值为50的内容,栈中怎么会存储字面量呢?存在哪里?
比如下边的代码
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的位置。
而且有个很重要的点,本地变量表中某个位置不一定一直对应某个变量,可以对应多个变量。
15 回答6.8k 阅读
2 回答3.3k 阅读✓ 已解决
3 回答7k 阅读✓ 已解决
5 回答4.7k 阅读
3 回答5.1k 阅读
4 回答2.3k 阅读
2 回答2.3k 阅读✓ 已解决
直接写一个测试类,编译一下,javap -verbose 看一下就知道你是对的了
这个文章完全扯淡,基本类型变量自己就保存值,拿来的地址一说……
如果是字符串还可以理解,两个相同的字面量共享同一个字符串常量对象