方法的值传递机制练习

理解方法的值的传递的流程:

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

posted @ 2018-12-23 22:27  T&K  阅读(227)  评论(0编辑  收藏  举报