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成员变量 为"神照经"
Android-Java-引用数据类型参数传递内存图的更多相关文章
- 牛客网Java刷题知识点之基本数据类型参数传递和引用数据类型参数传递图解
不多说,直接上干货! //基本数据类型参数传递 class Demo { public static void main(String[] args) { ; show(x); System.out. ...
- java引用数据类型(类)
1 引用数据类型分类 类的类型分两种 1)Java提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供开发者使用.(类的变量是属性) 2)开发者自己创建的类, ...
- 各个JAVA场景下的内存图
首先,内存模型图,如下: 其次,一句话概括各个区域的作用: 1:程序计数器(Program Counter Register),让虚拟机中的字节码解释器通过改变计数器的值来获取下一条代码指令,比如分支 ...
- Java学习笔记之:Java引用数据类型之字符串
一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...
- java 引用数据类型(类)
我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. 第二种,我们自己创建的类,按照类的定义标准, ...
- Java 引用数据类型
引用数据类型 * A: 数据类型 * a: java中的数据类型分为:基本类型和引用类型 * B: 引用类型的分类 * a: Java为我们提供好的类,比如说:Scanner,Random等. * C ...
- java引用数据类型在方法中的值传递
package org.jimmy.autosearch20180821.test; public class TestStringArr { public static void main(Stri ...
- java引用数据类型之Scanner与Random
一 Scanner类 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); 每种引用数据类型都s ...
- 13.Java基础_数组内存图
单个数组内存图 new int[3]: 在堆内存里申请一块空间存储int类型的变量(初始化时值都为0) int[] array: 在栈内存申请一块内存存储堆内存里数组的首地址 array[i]: 通过 ...
随机推荐
- Laravel Many to Many Polymorphic Relationship
Many to many Polymorphic relationship is also a little bit complicated to understand. For example, i ...
- 【机器学习】感知机学习算法(PLA)
感知机问题学习算法引入:信用卡问题 根据已知数据(不同标准的人的信用评级)训练后得出一个能不能给新客户发放信用卡的评定结果 解决该问题的核心思想扔为之前所讲到的梯度下降算法,对于更多条件的类似问题,首 ...
- 【算法】Escape
The students of the HEU are maneuvering for their military training. The red army and the blue army ...
- 【NIFI】 实现数据库到数据库之间数据同步
本里需要基础知识:[NIFI] Apache NiFI 安装及简单的使用 数据同步 界面如下: 具体流程: 1.使用ExecuteSQL连接mysql数据库,通过写sql查询所需要的数据 2.nifi ...
- 查看Android应用所需权限(uses-permission)
http://www.tuicool.com/articles/zq2meq MainActivity如下: package cc.testusespermission; import android ...
- Quartz(强大的定时器)
1.关于Quartz的配置文件说明 # # Quartz会优先读取项目下我们自定义这个quartz.properties配置文件 否则会去读取quartzjar包下org.quatrz包# 下面的那个 ...
- 高效能程序员的七个习惯【csdn】
从网上看到的,感觉挺不错的! Beautiful is better than ugly. Explicit is better than implicit. Simple is better tha ...
- hdu-1041(大数模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1041 题意:电脑中存在数字1,进行扩展操作,如果遇到1变为“01”,如果遇到0,变为“10”,经过一次 ...
- 微信小程序app.json配置
找到app.json文件,找到window配置项 1.windows选项下导航栏样式 "navigationBarBackgroundColor":#F6F6F6 // 导航栏的背 ...
- shell知识积累
Ubuntu下常用的快捷键:https://blog.csdn.net/u010771356/article/details/53543041 变量名和等号之间不能有空格,变量名中间不能有空格,可以使 ...