Android-Java-引用数据类型参数传递内存图

首先看一个案例:

package android.java.oop04;

class Person {

    public String name;

    public void showName() {
        System.out.println("名字是:" + name);
    }
}

/**
 * 引用类型参数传递
 */
public class OopDemo01 {

    public static void main(String[] args) {
        Person p = new Person();

        p.name = "连城剑法";
        
        myMethod(p);

        p.showName(); // 打印name值
    }

    static void myMethod(Person p) {
        p.name = "神照经";
    }
}

执行结果:

      名字是:神照经


根据以上代码,分析然后在内存中开辟分配处理原理:

1.main方法被 JVM 准备执行,然后main被JVM执行,然后main就在栈内存中压栈;

2.在栈内存中 new Person(); , 这个 new Person(); 将会在堆内存中开辟控件构建对象 Person对象 分配内存地址089#f;

3.在栈内存中 Person p = 引用的地址是:89#f,意思就是 栈内存中的 p指向了 ----> 堆内存中的Person对象,根据唯一的内存地址89#f指定

4.在栈内存中 p.name="连城剑法" 是通过对象引用地址89#f,去修改堆中Person对象的name属性的值 为”连城剑法“

5.在栈内存中 调用myMethod(p)方法,此时myMethod方法会压栈/进栈;

6.在栈内存中 myMethod(Person p)方法中的参数p,此时的对象内存地址是89#f,和main方法的p对象地址一样;

7.在栈内存中 myMethod(Person p)方法中的参数p,p.name = "神照经" 是通过对象内存地址89#f 去修改--->堆内存中Person对象的name成员变量 为"神照经"

 

原文地址:https://www.cnblogs.com/android-deli/p/10303224.html