zoukankan      html  css  js  c++  java
  • 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成员变量 为"神照经"

     

  • 相关阅读:
    Nginx
    Influxdb
    Gitlab
    Git
    Gogs
    Dockerfile
    Docker Data
    My Projects
    中文学习
    科技精选
  • 原文地址:https://www.cnblogs.com/android-deli/p/10303224.html
Copyright © 2011-2022 走看看