方法的值傳遞機制練習
阿新 • • 發佈:2018-12-23
理解方法的值的傳遞的流程:
package com; class value { int i = 15; } public class pass { public static void main(String[] args) { pass p=new pass(); p.first(); } public void first() { int i = 5; value v1 = new value(); v1.i = 25; second(v1, i); System.out.println(v1.i); }public void second(value v2, int i) { i = 0; v2.i = 20; value val = new value(); v2 = val; System.out.println(v2.i + " " + i); } }
這裡,當first方法呼叫second方法時,將v1的value方法的地址傳遞給了v2,而v2改變了v1所在的那個value方法的值,變成了20
當val重新呼叫的value的地址,value裡面的數值還原,即int=15,然後將val呼叫的value的新的地址賦給了v2,所以值也就是15,(v2當改變完了v1所在的value堆空間的數值之後,就改變了指向的地址,變成了val的地址)
而這裡面的int是存在於棧空間的,不是在value方法的堆空間裡,所以呼叫了value對於i沒有宣告影響。
輸出之後,釋放了second所存的數值,但是v1所在的value方法的數值沒有釋放,所以輸出的v1是v2所改變後的數值,即為20