Java---详解方法传值问题
过程解析:
1.首先执行int[] arr={3,5,6,1,7,9,0},遇到数组先执行等式右边的,{3,5,6,1,7,9,0}会在堆内存中开辟一块空间,分成7小块,下标分别从0~6,先进行系统初始化,系统默认初始值均为0,然后将程序初始值3,5,6,1,7,9,0分别赋值给7块小空间,在堆内存中开辟的空间会有一个地址值,假设为0x25df,至此等式右边走完,开始走等式左边,等式左边申明了一个数组arr,arr也是一个变量存储在栈内存中,此外方法也在栈中执行,arr在main方法内部开辟一块空间,然后执行赋值,将等式右边的赋值给等式左边的,即将地址0x25df赋值给arr,arr可以通过地址找到堆内存{3,5,6,1,7,9,0}中的任何元素。
2.接着执行changeRef(arr),遇到方法首先在栈内存中开辟一块空间changeRef(),然后在该空间内部开辟一块空间存储arr1,此处是将arr的地址值传给arr1,即arr1地址变为0x25df,接着执行方法changeRef(),遇到arr1=new int[2],先执行等式右边的,在new int[2]堆内存中开辟一块空间,产生一个地址值,假设为0x8fa6,然后执行等式右边的,将该地址值赋值给arr1,此时arr1的原地址会被新地址覆盖,arr1的新地址为0x8fa6,指向new int[2]这个堆内存空间,此时changeRef()方法执行完成,该方法在栈内存中开辟的空间会立即释放。