当前位置: 首页 > 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中的数组的内存存储和赋值原理。

感谢 💖

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

相关文章:

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

基本数据类型与内存存储数组类型与内存存储为什么数组需要两块空间?感谢 💖 基本数据类型与内存存储 首先,让我们回顾一下基本数据类型的内存存储方式。对于一个基本类型变量,例如int类型的变量a,内存中只有一块内存空…...

MySQL数据库 MHA高可用

MySQL MHA 什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的…...

leetcode669. 修剪二叉搜索树(java)

修剪二叉搜索树 题目描述递归代码演示: 题目描述 难度 - 中等 LC - 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留…...

计算机网络的故事——确认访问用户身份的认证

确认访问用户身份的认证 HTTP使用的认证方式:BASIC认证(基本认证)、DIGEST(摘要认证)、SSL客户端认证、FormBase认证(基于表单认证)。 基于表单的认证:涉及到session管理以及cookie…...

C#禁用或启用任务管理器

参考文档https://zhuanlan.zhihu.com/p/95156063 借助上述参考文档里的C#操作注册表类,禁用或启用任务管理器 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace HideTaskMgr { class Program { …...

【Redis】NoSQL之Redis的配置及优化

关系数据库与非关系数据库 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言&a…...

【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键

一、简介 在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据&#…...

Si24R2F+畜牧 耳标测体温开发资料

Si24R2F是针对IOT应用领域推出的新款超低功耗2.4G内置NVM单发射芯片。广泛应用于2.4G有源活体动物耳标,带实时测温计步功能。相较于Si24R2E,Si24R2F增加了温度监控、自动唤醒间隔功能;发射功率由7dBm增加到12dBm,距离更远&#xf…...

阿里云服务器退款流程_退订入口_到账时间说明

阿里云服务器如何退款?云服务器在哪申请退款?在用户中心订单管理中的退订管理中退款,阿里云百科分享阿里云服务器退款流程,包括申请退款入口、云服务器退款限制条件、退款多久到账等详细说明: 目录 阿里云服务器退款…...

自然语言处理实战项目17-基于多种NLP模型的诈骗电话识别方法研究与应用实战

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目17-基于NLP模型的诈骗电话识别方法研究与应用,相信最近小伙伴都都看过《孤注一掷》这部写实的诈骗电影吧,电影主要围绕跨境网络诈骗展开,电影取材自上万起真…...

安全错误攻击

近年来基于错误的密码分析(fault-based cryptanalysis)已成为检测智能卡(Smartcard)安全的重要因素。这种基于错误的密码分析,假设攻击者可以向智能卡中导入一定数量的、某种类型的错误,那么智能卡会输出错…...

ELK安装、部署、调试 (八)logstash配置语法详解

input {#输入插件 }filter {#过滤插件 }output {#输出插件 } 1.读取文件。 使用filewatch的ruby gem库来监听文件变化&#xff0c;并通过.sincedb的数据库文件记录被监听日志we年的读取进度&#xff08;时间 搓&#xff09; 。sincedb数据文件的默认路径为<path.data>/…...

SPI协议

文章目录 前言一、简介1、通信模式2、总线定义3、SPI通信结构4、SPI通讯时序5、SPI数据交互过程 二、多从机模式1、多NSS2、菊花链3、SPI通信优缺点4、UART、IIC、SPI 区别 三、总结四、参考资料 前言 SPI协议是我们的重要通信协议之一&#xff0c;我们需要掌握牢靠。 一、简介…...

机器学习算法系列————决策树(二)

1.什么是决策树 用于解决分类问题的一种算法。 左边是属性&#xff0c;右边是标签。 属性选择时用什么度量&#xff0c;分别是信息熵和基尼系数。 这里能够做出来特征的区分。 下图为基尼系数为例进行计算。 下面两张图是对婚姻和年收入的详细计算过程&#xff08;为GINI系…...

ACM中的数论

ACM中的数论是计算机科学领域中的一个重要分支&#xff0c;它主要研究整数的性质、运算规律和它们之间的关系。在ACM竞赛中&#xff0c;数论问题经常出现&#xff0c;因此掌握一定的数论知识对于参加ACM竞赛的选手来说是非常重要的。本文将介绍一些常见的数论概念和方法&#x…...

我的创作纪念日 —— 一年之期

前言 大家好&#xff01;我是荔枝嘿~看到官方私信才发现原来时间又过去了一年&#xff0c;荔枝也在CSDN中创作满一年啦&#xff0c;虽然中间因为种种原因并没有经常输出博文哈哈&#xff0c;但荔枝一直在坚持创作嘿嘿。记得去年的同一时间我也同样写了一篇总结文哈哈哈&#x…...

qt.qpa.plugin:找不到Qt平台插件“wayland“|| (下载插件)Ubuntu上解决方案

相信大家也都知道这个地方应该做什么&#xff0c;当然是下载这个qt平台的插件wayland,但是很多人可能不知道怎么下载这个插件。 那么我现在要说的这个方法就是针对这种的。 sudo apt install qtwayland5完事儿了奥兄弟们。 看看效果 正常了奥。...

详解Spring Boot中@PostConstruct的使用

PostConstruct 在Java中&#xff0c;PostConstruct是一个注解&#xff0c;通常用于标记一个方法&#xff0c;它表示该方法在类实例化之后&#xff08;通过构造函数创建对象之后&#xff09;立即执行。 加上PostConstruct注解的方法会在对象的所有依赖项都已经注入完成之后执行…...

判断子序列

判断子序列 题目: 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"…...

Python Opencv实践 - 轮廓特征(最小外接圆,椭圆拟合)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.PNG") plt.imshow(img[:,:,::-1])#轮廓检测 img_gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) ret,thresh cv.threshold(img_gray, 127, 255, 0) contou…...

Unity游戏开发集成MCP协议:AI助手自动化操作指南

1. 项目概述&#xff1a;Unity游戏开发中的MCP革命如果你是一名Unity开发者&#xff0c;最近可能已经注意到一个名为“CoderGamester/mcp-unity”的项目在GitHub上悄然走红。这不仅仅是一个普通的插件或工具包&#xff0c;它代表了一种全新的工作流范式&#xff0c;旨在将大型语…...

终极指南:如何用BabelDOC彻底解决PDF翻译格式错乱问题

终极指南&#xff1a;如何用BabelDOC彻底解决PDF翻译格式错乱问题 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 还在为学术论文翻译后排版全乱而烦恼吗&#xff1f;&#x1f62b; 技术文档翻…...

Iris API错误处理机制与嵌入式系统优化实践

1. Iris API错误处理机制解析在嵌入式系统开发中&#xff0c;API的健壮性直接影响整个系统的稳定性。Iris框架作为ARM架构下的核心组件&#xff0c;其错误处理机制基于JSON-RPC 2.0规范进行了深度定制&#xff0c;特别适合资源受限的嵌入式环境。与通用Web API不同&#xff0c;…...

火灾动力学模拟实战:如何用FDS构建精准的火灾预测系统

火灾动力学模拟实战&#xff1a;如何用FDS构建精准的火灾预测系统 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 你是否曾面临这样的困境&#xff1a;当设计一栋大型商业建筑时&#xff0c;如何科学评估火灾时的人员疏…...

飞书自动化工具feishu-atuo:Python积木式开发与实战指南

1. 项目概述&#xff1a;飞书自动化&#xff0c;从零到一的效率革命 如果你和我一样&#xff0c;每天的工作流里都离不开飞书&#xff0c;那你肯定也经历过这些时刻&#xff1a;手动把日报、周报从文档复制到表格里归档&#xff1b;在多个群里重复发送同样的通知&#xff1b;为…...

如何在Chrome浏览器中快速生成与解析二维码:Chrome QRCode插件终极指南

如何在Chrome浏览器中快速生成与解析二维码&#xff1a;Chrome QRCode插件终极指南 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件&#xff0c;用于生成当前URL或者选中内容的…...

开源无人机任务控制系统:微服务架构与自主飞行开发实战

1. 项目概述&#xff1a;一个开源的无人机任务控制系统如果你和我一样&#xff0c;玩过一段时间无人机&#xff0c;从最初的“一键起飞”到后来想实现一些自动化的航线飞行&#xff0c;你可能会发现&#xff0c;市面上成熟的任务规划软件&#xff08;比如DJI的Pilot 2或一些地面…...

005 DevEco Studio OHPM同步404报错 解决文档

[cs]005 DevEco Studio OHPM同步404报错 解决文档 文档简介 本文解决鸿蒙开发中新建空白项目自动触发ohpm install时报错&#xff1a;ohos/hypium、ohos/hamock包404找不到、拉取依赖失败问题。 核心原则&#xff1a;不修改项目任何自带文件、不删除系统生成依赖、不改动业务代…...

基于LLM与RAG构建智能问答系统:架构、实现与优化指南

1. 项目概述&#xff1a;当RAG遇上LLM&#xff0c;构建你的智能知识问答引擎最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Jenqyang/LLM-Powered-RAG-System”。光看名字&#xff0c;圈内人大概就能猜到个七七八八&#xff1a;这是一个基于大语言模型&#xff08;LLM&…...

浏览器扩展实现AI提示词高效管理:从模板变量到工作流优化

1. 项目概述与核心价值最近在折腾AI工具链&#xff0c;发现一个痛点&#xff1a;每次和ChatGPT、Claude或者本地部署的大模型对话时&#xff0c;那些精心调试好的提示词&#xff08;Prompt&#xff09;总是散落在各个聊天窗口里&#xff0c;要么就是得手动复制粘贴&#xff0c;…...