当前位置: 首页 > news >正文

【java基础复习】java中的数组在内存中是如何存储的?

  • 基本数据类型与内存存储
  • 数组类型与内存存储
  • 为什么数组需要两块空间?
  • 感谢 💖

基本数据类型与内存存储

首先,让我们回顾一下基本数据类型的内存存储方式。对于一个基本类型变量,例如int类型的变量a,内存中只有一块内存空间,它存储着该变量的值。这块内存空间具有一个唯一的内存地址。比如 int a = 100 ,a就是内存中一块存储空间的名称,它的地址也就是这块存储空间的地址,比如是0x1112,a的值是100,也就是这块内存空间里的内容。

代码内存地址内存数据
int a = 1000x1112100

数组类型与内存存储

现在让我们考虑数组类型的内存存储方式。对于一个数组变量,例如int数组变量arr,它实际上包含两块内存空间。一块内存空间存储着数组内容本身,另一块内存空间存储着数组的位置(或者说是对数组内容的引用)。

代码内存地址内存数据
int[] arr = {1,2,3}0x11130x3000
0x30001
0x30042
0x30083

为什么数组需要两块空间?

现在让我们回答为什么数组需要两块空间而不能只用一块。考虑以下代码片段:

int[] arrA = {1, 2, 3};
int[] arrB = {4, 5, 6, 7};
arrA = arrB;

在这个代码片段中,我们有两个数组变量arrA和arrB,它们分别具有不同的长度。然后,我们将arrB的值赋给arrA。如果arrA的内存空间直接存储数组内容,那么它将没有足够的空间来容纳arrB的所有元素。这会导致内存溢出或数据丢失的问题。而使用两块空间存储数组变量和数组内容,那么我们进行赋值时,只是对内容地址的赋值,也就是说,当我们执行arrA = arrB;时,实际上是将arrA指向了和arrB相同的内存位置,而arrA原来指向的{1, 2, 3}的内存空间由于不再被引用而可以进行垃圾回收。

这是由于在JVM中,内存被分为不同的区域,包括堆(Heap)、栈(Stack)、方法区(Method Area)等。其中,堆用于存储对象的实例和数组,而栈用于存储局部变量和方法调用的信息。

对于数组来说,实际的数据内容存储在堆内存中。而数组变量(引用)本身存储在栈内存中。当我们执行赋值操作时,实际上是将一个引用复制给另一个引用,这使得两个引用指向了相同的堆内存位置。

下面这张图简单的体现了arrB 和 arrA这两个数组在内存中的存储情况:
在这里插入图片描述
下面这张图体现了在执行arrA = arrB时内存的存储情况。可以看到,只是改变的arrA数组的指向,也就是地址。arrA原来指向的那块堆空间随后会被内存回收。
在这里插入图片描述

希望上面的解释和演示能够帮助大家更好地理解java中的数组的内存存储和赋值原理。

感谢 💖

好啦,这次的分享就到这里,感谢大家看到这里🤞

http://www.lryc.cn/news/156142.html

相关文章:

  • MySQL数据库 MHA高可用
  • leetcode669. 修剪二叉搜索树(java)
  • 计算机网络的故事——确认访问用户身份的认证
  • C#禁用或启用任务管理器
  • 【Redis】NoSQL之Redis的配置及优化
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键
  • Si24R2F+畜牧 耳标测体温开发资料
  • 阿里云服务器退款流程_退订入口_到账时间说明
  • 自然语言处理实战项目17-基于多种NLP模型的诈骗电话识别方法研究与应用实战
  • 安全错误攻击
  • ELK安装、部署、调试 (八)logstash配置语法详解
  • SPI协议
  • 机器学习算法系列————决策树(二)
  • ACM中的数论
  • 我的创作纪念日 —— 一年之期
  • qt.qpa.plugin:找不到Qt平台插件“wayland“|| (下载插件)Ubuntu上解决方案
  • 详解Spring Boot中@PostConstruct的使用
  • 判断子序列
  • Python Opencv实践 - 轮廓特征(最小外接圆,椭圆拟合)
  • Ubuntu22.04 LTS+NVIDIA 4090+Cuda12.1+cudnn8.8.1
  • 重装系统后,MySQL install错误,找不到dll文件,或者应用程序错误
  • 线程同步机制类封装及线程池实现
  • Linux中的用户、组和权限
  • python学习--基本数据类型之字典
  • 【OpenCV入门】第九部分——模板匹配
  • 在设计web页面时,为移动端设计一套页面,PC端设计一套页面,并且能自动根据设备类型来选择是用移动端的页面还是PC端的页面。
  • 微信小程序地图应用总结版
  • 分支创建查看切换
  • 参编三大金融国标,奇富科技以技术促行业规范化演进
  • 芯片开发之难如何破解?龙智诚邀您前往DR IP-SoC China 2023 Day