码迷,mamicode.com
首页 > 其他好文 > 详细

方法的值传递机制练习

时间:2018-12-23 23:55:11      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:pass   ima   练习   color   com   pre   传递   string   方法   

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

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

技术分享图片技术分享图片技术分享图片

方法的值传递机制练习

标签:pass   ima   练习   color   com   pre   传递   string   方法   

原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/10166001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!