值传递:
值传递相当于把参数值复制了一份,在内存中重新开辟了一块空间来存储,在方法中修改是修改的新开辟内存里存的的值,所以对原先的参数值没有影响。
java基本数据类型都为值传递(int、long、char、byte、float、double、short、boolean)。
地址1:参数a,值为1
在方法里进行值传递之后,新增加一个内存放参数a:
地址1:参数a,值为1
地址2:参数a,值为1
方法里修改参数a修改为0,实际修改的地址2的参数:
地址1:参数a,值为1
地址2:参数a,值为0
方法结束后,参数值不会发生变化:
地址1:参数a,值为1
引用传递:
引用传递在方法内修改之后,方法外的值也发生了改变。String、类、数组、接口这些都属于引用数据类型。
引用传递,相当于指向同一块地址,地址在堆中实际是一块内存,所以二者操作的是同一内存,在方法中修改,方法外面也会改变。
地址1:数组a,值为【1】
引用传递之后,将地址指向地址1:
地址1:数组a,值为【1】
将数组修改为【0】:
地址1:数组a,值为【0】
方法结束之后:
地址1:数组a,值为【0】