首先看一个案例:

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成员变量 为"神照经"

Android-Java-引用数据类型参数传递内存图的更多相关文章

  1. 牛客网Java刷题知识点之基本数据类型参数传递和引用数据类型参数传递图解

    不多说,直接上干货! //基本数据类型参数传递 class Demo { public static void main(String[] args) { ; show(x); System.out. ...

  2. java引用数据类型(类)

    1 引用数据类型分类 类的类型分两种 1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用.(类的变量是属性) 2)开发者自己创建的类, ...

  3. 各个JAVA场景下的内存图

    首先,内存模型图,如下: 其次,一句话概括各个区域的作用: 1:程序计数器(Program Counter Register),让虚拟机中的字节码解释器通过改变计数器的值来获取下一条代码指令,比如分支 ...

  4. Java学习笔记之:Java引用数据类型之字符串

    一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...

  5. java 引用数据类型(类)

    我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. 第二种,我们自己创建的类,按照类的定义标准, ...

  6. Java 引用数据类型

    引用数据类型 * A: 数据类型 * a: java中的数据类型分为:基本类型和引用类型 * B: 引用类型的分类 * a: Java为我们提供好的类,比如说:Scanner,Random等. * C ...

  7. java引用数据类型在方法中的值传递

    package org.jimmy.autosearch20180821.test; public class TestStringArr { public static void main(Stri ...

  8. java引用数据类型之Scanner与Random

    一 Scanner类 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型  变量名  =  new 数据类型(); 每种引用数据类型都s ...

  9. 13.Java基础_数组内存图

    单个数组内存图 new int[3]: 在堆内存里申请一块空间存储int类型的变量(初始化时值都为0) int[] array: 在栈内存申请一块内存存储堆内存里数组的首地址 array[i]: 通过 ...

随机推荐

  1. EasyUITree设置节点选中

    function callback1(){ reloadMind(); LoadTree0($("); setTimeout(function(){ var node = $('#tt1') ...

  2. python range用法

    1. range(n) 相当于枚举 从0<=i<n的整数 增量为1 for i in range(4): print(i) 结果:0 1 2 3 2. range(5,10) 相当于枚举 ...

  3. C++11与Unicode及使用标准库进行UTF-8、UTF-16、UCS2、UCS4/UTF-32编码转换

    zt https://blog.poxiao.me/p/unicode-character-encoding-conversion-in-cpp11/ Unicode Unicode是计算机领域的一项 ...

  4. NotificationMangerService处理显示通知

    设置——>应用——>点击“已下载”列表中的任一APP,如图:  代码位置:Settings\src\com\android\settings\applications\InstalledA ...

  5. git舍弃文件更改

    未进行任何提交,即文件更改在工作区 # filename 对应进行操作的文件名 git checkout -- filename 已用git add 命令提交,即文件更改在暂存区 # 舍弃暂存区的修改 ...

  6. jQuery 2

    <head > <style type="text/css">        /*table中偶数行*/ .tabEven {            bac ...

  7. JVM新生代到老年代基础了解

    JVM区域总体分两类,heap区和非heap区. heap区又分为: - Eden Space(伊甸园). - Survivor Space(幸存者区). - Old Gen(老年代). 1个Eden ...

  8. Django的学习(二)————Templates

    一.django的模板: 在settings.py的文件中可以看到并设置这个模板. 1.直接映射: 通过建立的文件夹(templates)和文件(html)来映射. <!DOCTYPE html ...

  9. 前端之前端介绍或html的常用标签1

    一 web服务器的本质 由浏览器发送一个请求.服务器接收到,然后在回应一个响应. 由于浏览器的不同,web服务器响应的内容不一定被浏览器接收. HTTP/1.1 201 OK\r\n\r\n需要发送的 ...

  10. Python10/23--继承/派生

    (继承)1. 什么是继承? 在程序中继承是一种新建子类的方式,新创建的类称之为子类\派生类,被继承的类称之为父类\基类\超类 继承描述的是一种遗传关系,子类可以重用父类的属性 2. 为何用继承? 减少 ...