Bootstrap

java参数传递(局部变量)

基本数据类型:传递的是值的副本,修改副本不会对原值造成影响,也就是值传递
(Byte,Short,Integer,Long,Float,Double,Boolean,Character)

引用数据类型(除开基本数据类型的所有数据类型):传递的是对象的引用,如果通过引用2修改对象1,则会导致对象1的改变,而用引用1查询出来的对象1也随之改变。

基本数据类型
		int i = 0;
		int a = i;

通过"javap -c xxx.class"将代码反编译,生成结果如下
在这里插入图片描述
分析

  0: iconst_0 		0入栈,将0放到栈的顶部。
  1: istore_1 		将0从栈顶弹出,保存到局部变量表(局部变量表也是虚拟机栈的一部分)index为1的位置。
  2: iload_1 		    将局部变量表index为1的值的副本放到栈的顶部。
  3: istore_2 		将栈顶的值弹出,放到局部变量表的index为2的位置。
  4: return

这时候局部变量表中index=1的位置和index=2的位置分别存了一个0,修改i或者a不会对对方造成影响

引用数据类型

跟上面类似,但i和a都是指向同一个对象,此时通过i修改值会导致a的值也改变。(注意:引用数据类型在内存中的存储跟上面的不同)

顺便写下分别存储位置
局部变量成员变量
基本数据类型变量名与值都存在局部变量表中(虚拟机栈的一部分)变量名和值都在堆内存中
引用数据类型引用在局部变量表中,对象在堆内存中引用与对象都在堆内存中
;