Java中内存模型

参数传递图解与结论

在这里插入图片描述
通过上面的两段程序可以得出如下结论:根据内存去解释,局部变量随方法栈的弹出而消失;
当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响
因为局部变量随方法栈的弹出而消失,所以当调用方法时,如果传入的数值为基本数据类型(包含String类型)时,局部变量的改变对实际参数无
影响,如果传入的数值为引用数据类型(String类型除外),此时程序未结束,对象在堆中还存在,所以形式参数的改变对实际参数有影响。

对象的内存图解

在这里插入图片描述

基本类型和引用类型作为参数传递

在这里插入图片描述
基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。
在这里插入图片描述
当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6.show方法弹栈。
由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

3.4.2对象的内存解释

class Person {
	private int age;
	public int getAge() {
		return this.age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
public class PersonDemo {
	public static void main(String[] args) {
		Person p = new Person();
		p.setAge(30);
		System.out.println("大家好,今年我" + p.getAge() + "岁");
	}
}

在这里插入图片描述
程序执行流程说明:
1、先执行main方法(压栈),执行其中的 Person p = new Person();
2、在堆内存中开辟空间,并为其分配内存地址0x1234,紧接着成员变量默认初始化(age = 0);将内存地址0x1234赋值给栈内存中的Person p 变量
3、继续执行p.setAge(30)语句,这时会调用setAge(int age)方法,将30赋值为setAge方法中的“age”变量;执行this.age = age语句,将age变量值30 赋值给成员变量this.age为30;
4、setAge()方法执行完毕后(弹栈),回到main()方法,执行输出语句System.out.println(),控制台打印p对象中的age年龄值。
注意:
this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。
上述代码中的 p.setAge(30)语句中,setAge(int age)方法中的this代表的就是p对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/307535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

文/朱季谦 熬夜写完,尚有不足,但仍在努力学习与总结中,而您的点赞与关注,是对我最大的鼓励! 在一些本地化项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时&…

第二证券:证监会紧急声明!加密货币大笔爆仓

当地时刻1月9日,美股三大指数涨跌纷歧。道指跌157.85点,跌幅为0.42%,报37525.16点;纳指涨13.94点,涨幅为0.09%,报14857.71点;标普500指数跌7.04点,跌幅为0.15%,报4756.50…

蓝凌EIS智慧协同平台 ShowUserInfo.aspx sql注入漏洞

漏洞描述: 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台,覆盖OA、沟通、客户、人事、知识等管理需求,集合了非常丰富的模块,满足组织企业在知识、项目管理系统建设等需求的…

三维猴打印PCB外壳预留板壳间距

3D文件下单那里有一个“3D模型设计规范”,里面详细讲了设计时要考虑打印的参数细节。如果有其他的设计规范不了解的也可以进去查看,里面写的很详细。 这里是打印PCB外壳预留板壳间距相关说明: 设计模型为装配体,请务必满足装配最…

IoT 物联网 MQTT 协议 5.0 版本新特性

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门为设备资源有限和低带宽、高延迟的不稳定网络环境的物联网场景应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于智能硬件、智慧城市、智慧农业、智慧医疗、新零…

基于ssm的在线视频网站开发论文

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

LED电子屏组装常见故障及解决办法大全

在LED电子屏的组装过程中,可能会遇到各种故障。以下是一些常见问题及其解决方法: 1. 加载不上可能的原因及解决办法: A. 确保控制系统硬件正确上电(5V)。 B. 检查并确认用于连接控制器的串口线为直通线。 C. 检查串口…

JAVA课程设计--类京东购物车设计

目录 小组成员 负责模块: 程序介绍: 1.前期调查: 1.1京东购物车页面 首页 购物车界面 商品信息界面 搜索界面 1.2程序设计页面 首页 购物车页面 商品信息界面 搜索界面: 2.使用环境: 3.技术支持 前端V…

pycharm+pyqt 外部工具:ui转py、打开qtDesigner、.qrc转py

目录 1、打开设置-外部工具 2、qtdesigner工具 3、ui转py 4、prc转py 5、找到配置好的外部工具进行使用 1、打开设置-外部工具 点击“ctrlalts”一键打开设置界面,进入界面后“工具-外部工具-按钮-创建工具栏”打开创建外部工具窗口,如下图所示&…

算法通关村番外篇-LeetCode编程从0到1系列二

大家好我是苏麟 , 今天来说LeetCode编程从0到1系列二 . 内置函数 最后一个单词的长度 描述 : 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子…

STM32F103C8T6(HAL库函数 - 内部Flash操作)

简介 STM32F103C8T6 内部Flash 为 64KB,本次将对他多余空间进行读写。 介绍 数据手册下载 STM32F103x8/STM32F103xB 数据手册 包含Flash Memory Page分布 STM32F设备命名 设备容量类型 中容量类型 内部空间介绍 64 KBytes大小Flash Memory 从 0x0800 0000 ~…

【驱动序列】C#获取电脑硬件之CPU信息,以及它都有那些品牌

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是是《驱动序列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识…

燃油车智能化时代将终结,长安汽车凭啥引领“数智新汽车”周期?

日前高工智能汽车研究院发布报告称,2024年将是新能源市场的新拐点,燃油车智能化时代即将终结,新能源和智能化将深度融合发展。 伴随着整车电子电气架构加速迈入中央计算-区域控制架构时代,智能电动汽车将从单一功能升级的智能化1…

机器学习 —— 自用整理期末复习笔记

一、绪论 机器学习术语 假设空间 p5 监督学习(supervised learning)的任务是学习一个模型,使模型能够对任意给定的输入,对其相应的输出做出一个好的预测。模型属于由输入空间到输出空间的映射的集合,这个集合就是假设空…

shader技巧

数学函数: abs():绝对值函数。 acos():反余弦函数。 asin():反正弦函数。 atan():反正切函数。 ceil():向上取整函数。 cos():余弦函数。 cross():向量叉积函数。 distance()&#x…

Cesium笔记 viewer控件隐藏

Cesium初始化后,场景中会有时间轴,动画,home等控件显示,需要将这些控件隐藏,如下: init() {let viewer new Cesium.Viewer("cesiumContainer", {fullscreenButton: false, // 隐藏界面右下角全…

PLECS如何下载第三方库并导入MOSFET 的xml文件,xml库路径添加方法及相关问题

1. 首先xml库的下载,PLECS提供了一个跳转的链接。 https://www.plexim.com/download/thermal_models 2. 下载一个库(以最后一个Wolfspeed为例,属于CREE的SiC MOSFET) 下载这个就行,都包含了。不信自己可以试试再下载…

arthas 内存占用过大排查

使用经验分享 线上故障排查思路: 1、紧急处理,优先保障服务可用(如切换vip,主备容灾) 2、保留第一现场,通过jstack -l {pid} > jvmtmp.txt ,打印栈信息 (后续可以在gceasy官网上…

vagrant 用户名密码登录

正常登录后 sudo -i 切换到root权限 vim /etc/ssh/vim sshd_config 将PasswordAuthentication no设置 为yes 重启sshd.service服务 systemctl restart sshd.service

Apache Doris (六十二): Spark Doris Connector - (2)-使用

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. 将编译jar包加入本地Maven仓库
最新文章