• 方法的值传递机制练习


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

    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

  • 相关阅读:
    移动端兼容性问题解决方案
    h5启动原生APP总结
    前端性能优化
    移动端meta行大全
    CSS3,transform3D立体可拖拽正方体实现原理
    FileReader与FileWriter
    lunix cat tail more等用法
    Scanner用法
    SimpleDateFormat的一些常用用法
    Linux下scp的用法
  • 原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/10166001.html
Copyright © 2020-2023  润新知