過程解析: 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塊小空間,在堆記憶體 ...
過程解析:
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()方法執行完成,該方法在棧記憶體中開闢的空間會立即釋放。