JVM_Java到底是值传递还是引用传递
2021-04-22 18:28
标签:code str 粘贴 字节码 strong 完成 ima 两种 info 这个问题的完整语义是: Java方法调用时,参数变量是值传递还是引用传递的。 所谓引用传递是指传递栈帧中的局部变量表的变量槽地址,值传递是指传递栈帧中的局部变量表的变量槽地址所存储的值。 局部变量表中的变量槽分为两种: 基本类型变量槽会直接存储字面量值,引用类型变量槽会存储堆中的对象地址。 回答这个问题,最有说服力的角度还是从jvm来解释,来看下面这个Java代码及反编译的字节码指令: 下面对指令进行解释: aload_0 表示将第一个局部变量this压入操作数栈; iload_1 表示将第二个局部变量(int型的)压入操作数栈; invokevirtual 表示调用b方法; 我们可以得出这样的结论,a方法调用b方法并传递参数时流程如下: 从以上流程可以总结出: a调用b方法并传递参数,并不会改变a方法的局部变量表。 方法调用是通过操作数栈完成两个栈帧的局部变量表中变量的传递,相当于是将变量槽中的值复制了一份,通过操作数栈粘贴给了被调用方法的参数变量。这也正是值传递的定义。 参考:https://www.eefocus.com/embedded/279883 JVM_Java到底是值传递还是引用传递 标签:code str 粘贴 字节码 strong 完成 ima 两种 info 原文地址:https://www.cnblogs.com/hans-kl/p/13275365.htmlpublic class TestArg {
public void a() {
int a = 10;
b(a);
}
public int b(int i) {
return i + 100;
}
}
所以Java是值传递。
https://zhouj000.github.io/2019/03/21/java-base-jvm5/
文章标题:JVM_Java到底是值传递还是引用传递
文章链接:http://soscw.com/index.php/essay/78192.html