iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java基础知识精通数组的内存分析
  • 902
分享到

Java基础知识精通数组的内存分析

2024-04-02 19:04:59 902人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.数组内存图2.两个数组的内存图3.一个变量两个数组容器的内存图4.两个变量指向一个数组容器的内存图前言:本文章主要讲解数组的内存图,更好地掌握数组以及数组调用流程,话不多说开

前言:本文章主要讲解数组的内存图,更好地掌握数组以及数组调用流程,话不多说开讲。

1.数组内存图

1.一个数组的内存图

int[] arr = new int[3]; 		//刚开始定义数组arr为int型包含三位数字,初始化为0,0,0.
arr[0] = 12;  					//数组arr第一位被赋值12
arr[2] = 14;  					//数组arr第三位被赋值14
System.out.println(arr[0]);  	//12
System.out.println(arr[1]);  	//0
System.out.println(arr[2]);		//14
System.out.println(arr);		//[I@7852e922

解释

如下图:栈相当于存放数组变量的地址,堆相当于存放数组里面的元素而他们的下标就相当于房间号。

在这里我临时定义arr的地址是0x001等同于[I@7852e922。

下面我开始介绍一下数组的调用流程 :

  • 第一步刚开始定义arr为int型数组变量放在栈里,数组里面的三个元素放在堆里并初始化为0,0,0。
  • 第二步分别把12,14赋值给arr[0],arr[2]。所以我们根据栈的地址0x001去堆里找到相应的地址,找到房间号0、2并把12、14放到相应的房间号。这样数组第一位为12,第三位为14。
  • 第三步输出数组元素以及数组的地址。这个就很简单啦!从栈里找到数组arr的地址去堆里调用相应数组的元素。

调用完成之后,栈和堆里的数据就会消失。

看懂了一个数组内存图,下面几个就会看懂啦。

2.两个数组的内存图

int[] arr1 = new int[]{23,12,5}; //一开始就初始化为23、12、5。
System.out.println(arr1[0]); //23
System.out.println(arr1[1]); //12
System.out.println(arr1[2]); //5
System.out.println(arr1);    //0x001
arr1[0] = 13;  //把13赋值给arr1第一位。
System.out.println(arr1[0]);  //13
int[] arr2 = {14,18,15};    //与上面同理
System.out.println(arr2[0]); //14
System.out.println(arr2[1]); //18
System.out.println(arr2[2]); //15
System.out.println(arr2);    //0x002
arr2[1] = 12;   //赋值给arr2第二位为12
System.out.println(arr2[1]); //12
  • 这个与第一个数组不同的是数组里面的元素全部被初始化赋值。
  • 流程都一样,都是先通过栈找到数组地址根据地址去堆寻找相应数组元素。
  • 当数组arr1运行完后会退出栈和堆,给arr2让出内存空间。也就是说arr1运行完后会消失于内存,arr2数组进入内存进行操作。
  • 这两个数组的地址不一样。

3.一个变量两个数组容器的内存图

int[] arr = new int[3];		//定义一个int型的arr数组,包含三个元素初始化为0。
System.out.println(arr[0]);  // 0
arr[0] = 3;					 
System.out.println(arr[0]);	 //3
System.out.println(arr);     //0x001
arr = new int[5];         	//重新赋值int型的arr数组,包含5个元素初始化为0,并且数组地址也相应改变。
System.out.println(arr[0]); // 0
arr[0] = 5;
System.out.println(arr[0]); // 5
System.out.println(arr);    //0x002     如果不明白看下图
  • 这个与其他两个案例不同的是把两个数组都指向同一个变量,这就相当于往同一个杯子先放入清水然后把水喝光再放入饮料。
  • 这两个数组跟杯子是同一个道理,当arr =new int[3]执行完后会被 new int[5]数组元素所覆盖。所有的数组元素和地址会改变。
  • 执行流程跟我讲的第一个案例一样。

4.两个变量指向一个数组容器的内存图

int[] arr1 = new int[3];		//定义一个int型的arr数组,包含三个元素初始化为0。
System.out.println(arr1[0]);	//0
arr1[0] = 12;
System.out.println(arr1[0]);	//12
System.out.println(arr1);		//0x001
int[] arr2 = arr1;				//把arr1变量赋值给arr2
System.out.println(arr2[0]);	//12
arr2[0] = 13;
System.out.println(arr2[0]);	//13
System.out.println(arr2);		//0x001
System.out.println(arr1[0]);	//13
  • 这个案例与上一个案例不同的是这个案例是两个变量指向同一个数组,就相当于原本给你发顺丰快递,后来给你改发为圆通快递,但是收件人依旧是你,地址也不会发生改变。
  • 所以arr1赋值给arr2,里面的元素与数组地址都不会改变。
  • 最后程序输出arr1[0]的值实际上是arr2[0]的值。

--结束END--

本文标题: Java基础知识精通数组的内存分析

本文链接: https://www.lsjlt.com/news/147660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java基础知识精通数组的内存分析
    目录1.数组内存图2.两个数组的内存图3.一个变量两个数组容器的内存图4.两个变量指向一个数组容器的内存图前言:本文章主要讲解数组的内存图,更好地掌握数组以及数组调用流程,话不多说开...
    99+
    2024-04-02
  • Java基础知识精通数组的使用
    目录1.数组2.数组定义格式3.访问数组4.遍历数组前言:本文章正式踏入数组部分,今天来讲一下数组。 1.数组 数组是一组数据结构,用来储存一组相同类型值的集合。 数组就是一个容器。...
    99+
    2024-04-02
  • Java基础知识精通二维数组的应用
    目录1.什么是二维数组2.定义格式3.二维数组的使用4.二维数组的遍历本文章主要讲二维数组定义,用法。 1.什么是二维数组 在二维数组多个元素为一维数组的数组就称为二维数组 2.定义...
    99+
    2024-04-02
  • Java基础知识精通各种运算符
    目录前言一、算数运算符1.简介2.运用+-*/%二、自增自减运算符++–三、赋值运算符四、关系运算符五、逻辑运算符&(单与)| (单或)^(异或)!(非)&...
    99+
    2024-04-02
  • PHP数组基础知识解析
    PHP数组基础知识解析 在PHP中,数组是一种非常重要且常用的数据类型,可以存储多个值并通过索引或键来访问这些值。本文将从基础开始,介绍PHP数组的使用方法和一些常见操作,同时会提供具...
    99+
    2024-03-13
    php 数组 基础 键值对
  • java中基础知识的示例分析
    这篇文章主要为大家展示了“java中基础知识的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java中基础知识的示例分析”这篇文章吧。一.异常Java对异常的处理同Delphi一样,不是...
    99+
    2023-06-03
  • Java中基础知识点的示例分析
    这篇文章主要为大家展示了“Java中基础知识点的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中基础知识点的示例分析”这篇文章吧。1、String类1.1两种对象实例化方式对于S...
    99+
    2023-06-20
  • Java基础知识精通循环结构与break及continue
    目录前言for循环(常用)1.格式2.控制流程3.注释while循环(常用)1.格式2.执行流程do…while循环执行流程区别break与continue用法brea...
    99+
    2024-04-02
  • 新手了解java 数组基础知识
    目录1、数组的定义2、array 遍历3、List和array 之间的转换1、数组转list2、list 转数组3、Arrays工具类4、可能遇到的问题总结1、数组的定义 ...
    99+
    2024-04-02
  • AngularJS基础知识的示例分析
    这篇文章主要介绍了AngularJS基础知识的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。指令AngularJS 指令是扩展的 H...
    99+
    2024-04-02
  • Java基础知识精通注释与数据类型及常量与变量
    目录一. 注释1.简介2.类型1.单行注释2.多行注释3.文档注释3.注意事项二.数据类型1.简介2.整型3.浮点类型4.char类型5.boolean类型三.常量与变量1.常量2....
    99+
    2024-04-02
  • java数组基础的示例分析
    这篇文章主要介绍java数组基础的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数组数组(Array):相同类型数据的集合。Java 数组初始化的两种方法: 静态初始化: 程序员在初始化数组时为数组每个元素赋...
    99+
    2023-05-30
    java 数组
  • mysql中基础知识的示例分析
    这篇文章将为大家详细讲解有关mysql中基础知识的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql架构一、网络连接层客户端连接器(Client Conne...
    99+
    2024-04-02
  • HTML基础知识点的示例分析
    这篇文章将为大家详细讲解有关HTML基础知识点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   一、HTML是谁发明的   1990年Tim Berner...
    99+
    2024-04-02
  • Webshell的基础知识点详细分析
    这篇文章主要介绍Webshell的基础知识点详细分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、什么是Webshell?顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务...
    99+
    2023-06-07
  • Python基础知识点的示例分析
    这篇文章给大家分享的是有关Python基础知识点的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、python中的标志符:给变量取的名字就是标志符区分大小写,MyName和myname是两个不同的标志符...
    99+
    2023-06-29
  • Java基础之数组超详细知识总结
    目录一、一维数组二、二维数组三、总结一、一维数组 1、Java语言中的数组是一种 引用数据类型。不属于基本数据类型。数组的父类是 Object。 2、数组实际上是一个容器,可以同时容...
    99+
    2024-04-02
  • Java基础知识精通块作用域与条件及switch语句
    目录前言块作用域条件语句格式一格式二格式三(常用)switch语句前言 本文章主要讲解控制流程:块作用域、条件语句、switch语句,篇幅不大,通俗易记。 块作用域 在深入学习控制结...
    99+
    2024-04-02
  • mysql数据库基础知识点的示例分析
    这篇文章将为大家详细讲解有关mysql数据库基础知识点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数据库一、 修改数据表添加一列:ALTERTABL...
    99+
    2024-04-02
  • sql server中的内存基础知识有哪些
    今天就跟大家聊聊有关sql server中的内存基础知识有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一. 前言对于sql server 这个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作