记录6--Java栈堆
2024-09-07 00:45:19
class Person { int age; } public class LearnHeap { public static void main(String args[]){ int a=18;
Person person = new Person();
person.age =18; change(a,person);
System.out.println("a="+ a+",and person.age = "+person.age); } static void change(int a1, Person person){ a1 = 20;
person.age= 2020;
System.out.println("a1="+ a1+",and age1 = "+person);//输出地址 } }
以上程序内存加载的执行步骤:
第1步 —— main()函数是程序入口,JVM先执行,首先将main方法压入栈中,在栈内存中开辟一个空间,存放int类型变量a,同时附值18。
在堆中分配一片区域,用来存放和创建Person对象,这片内存区域会有属于自己的内存地址,假设是1001,然后给成员变量赋值,age=18
执行结束后,构造防范弾栈,Person创建完成,将Person的内存地址1001赋值给person(此处person小写,是引用变量类型)
第2步 —— JVM执行change()函数,在栈内存中又开辟一个新的空间,存放int类型变量a和对象Person中person
此时main空间与change空间并存,同时运行,互不影响。
第3步 —— change()方法执行,将a赋值为20,person对象的堆中年龄age赋值为2020
第4步 —— change()执行完毕,变量a立即释放,空间消失。但是main()函数空间仍存在,main中的变量a仍然存在,不受影响。而person在堆中对应的地址,所指的age已经赋值=2020
小结:如果a()方法中的基本类型(int, short, long, byte, float, double, boolean, char)变量x传入b()方法中,并在b()中进行了修改,则a()方法中的x的值保持不变
如果a()方法中的引用类型 变量x传入b()方法中,并在b()中进行了修改,则a()方法中的x的值与b()保持一致
最新文章
- linux 删除进程的多种方法
- pcap文件的文件头的link type
- DevExpres.XtraLayout控件运行时动态设置数据项
- 电子设计省赛--DMA与ADC
- 数据挖掘算法学习(三)NaiveBayes算法
- NET Framework 4.5 五个新特性
- VMware Workstation 12 Pro 之安装林耐斯-LinuxMint-系统
- win10优化
- 【HDU-6146】Pokémon GO(dp)
- 博客主Judge已跳槽搬家emmm
- 【原创 Hadoop&;Spark 动手实践 3】Hadoop2.7.3 MapReduce理论与动手实践
- C++ 执行 cmd 命令 删除文件 删除注册表项
- 1.加快Xshell客户端连接到CentOS的速度
- openfire维持在线状态,监听消息
- Android-Xml文件生成,Xml数据格式写入
- Mac服务管理-Launchd(转)
- 关于UI回调Invoker的实现(一)
- MDI窗体简单方法(调用,闪屏)
- PNP NPN NMOS PMOS S8050 S8550 SI2301 SI2302 2N3904 2N3906 78L05 TL431
- NHibernate中ISession的Flush
热门文章
- C 语言实例 - 约瑟夫生者死者小游戏
- 空指针异常与Optional类
- Linux02——解压和压缩
- IE6下的png不透明问题
- java -jar命令运行jar包时指定外部依赖jar包 linxux or windows
- Python基础(一) Python3环境搭建
- /var/lib/gems/2.5.0/gems/seccomp-tools-1.3.0/lib/seccomp-tools/dumper.rb:125: warning: Insecure world writable dir /home/python/.local in PATH, mode 040777 解决方案
- Java后台技术(TDDL)
- 数据表损坏:Incorrect key file for table
- 【代码总结】SQL语句设计