Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java数组在内存中是如何存放的

Java数组在内存中是如何存放的

作者头像
田维常
发布于 2020-04-21 09:55:24
发布于 2020-04-21 09:55:24
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

Java中有两种类型的数组:

  • 基本数据类型数组;
  • 对象数组;

当一个对象使用关键字“new”创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说也是一样的,因为数组也是一个对象;

一维数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[] arr = new int[3];

在以上代码中,arr变量存放了数组对象的引用;如果你创建了空间大小为10的整形数组,情况是一样的,一个数组对象所占的空间在堆上被分配,然后返回其引用;

二维数组

那么二维数组是如何存储的呢?事实上,在Java中只有一维数组,二维数组是一个存放了数组的数组,如下代码及示意图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];

对于多维数组来说,道理是一样的;

数组对象及其引用存放在内存中的哪里?

在Java中,数组同样是一个对象,所以对象在内存中如何存放同样适用于数组;

正如我们都知道的,java运行时数据区包括堆,JVM栈和其它。如下代码是一个小例子,那么就让我们来看看数组和它的引用在内存中是如何存放的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class A {
    int x;
    int y;
}
...
public void m1() {
    int i = 0;
    m2();
}
public void m2() {
     A a = new A();
}
...

如上代码,让我们来调用方法m1,看看发生了什么:

当m1被调用的时候,栈帧Frame-1被创建并push到栈中,同时局部变量i也在栈帧Frame-1内创建。

然后,m2方法在m1方法内部被调用,栈帧Frame-2被创建并push到栈中,在m2方法中,一个新的对象A在堆中被创建,而它的引用则被put到栈帧Frame-2里;

现在内存中堆和栈的大致情况如下图:

数组同样是对象,所以数组和对象以及引用在内存中的分布如上所示;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Java篇】内存中的桥梁:Java数组与引用的灵动操作
假设现在要存储5个学生的JavaSE考试成绩,并对其进行输出,按照之前掌握的知识,我们可能会写出如下代码:
半截诗
2025/05/07
910
【Java篇】内存中的桥梁:Java数组与引用的灵动操作
阶段01Java基础day05JAVA数组
声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http://www.duiyi.xyz/c%e5%ae%9e%e7%8e%b0%e9%9b%b7%e9%9c%86%e6%88%98%e6%9c%ba-12/
对弈
2019/09/04
3580
java数组内存结构
Java中的数组存储两种东西之一:要么是原始值(int, char, ...),或是引用(即指针)。
lovelife110
2021/01/14
6310
java数组内存结构
【Java SE】数组
int[] arr3 = new int[10];//只是分配了内存 但是没有进行赋值,只有默认值
xxxflower
2023/04/16
4280
【Java SE】数组
java数组理解
我们可以直接通过下标 ( 或索引 ) 的方式调用指定位置的元素,速度很快。
一个风轻云淡
2022/11/13
4751
java数组理解
【JavaSE专栏27】完成Java数组的初始化,数据存储从这里启程
本文对 Java 中数组初始化的方法进行了介绍,讲解了一维数组和二维数组的初始化语法,并给出了样例代码。
Designer 小郑
2023/08/02
3130
【JavaSE专栏27】完成Java数组的初始化,数据存储从这里启程
数组【从零到一】【纯干货】(不看后悔系列)
注:[]内部要给定一个常量,不能是个变量(只有支持c99语法的编译器才能正常编译)
see.
2024/06/04
1210
数组【从零到一】【纯干货】(不看后悔系列)
第四章:数组
new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组实体。
捞月亮的小北
2024/01/21
1560
第四章:数组
Java数组的使用
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/05/26
1160
Java数组的使用
深入理解 Java 数组
虽然在平常开发中,使用集合(容器)的频率比数组高得多,不过集合的底层也是通过数组来实现的。而且,尽管集合相比数组来说强大得多,但是其执行效率远不及数组。所以在讲集合之前,非常有必要深入了解一下数组。全文脉络思维导图如下:
飞天小牛肉
2021/03/18
6210
深入理解 Java 数组
5. 数组
(2)数组的元素类型:即创建的数组容器可以存储什么数据类型的数据​。元素的类型可以是任意的Java的数据类型。例如:int、String、Student等。
捞月亮的小北
2023/12/01
2230
5. 数组
【Java学习笔记之五】java数组详解
数组 概念 同一种类型数据的集合。其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 示例:int[] arr = new int[5]; 格式2: 元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7}; int[] arr = {
Angel_Kitty
2018/04/09
6910
【Java学习笔记之五】java数组详解
完整的java数组操作应用知识汇总
数组是一种非常有用和常用的数据类型,存在于每种程序语言之中,java中的数组是一种最简单的复合数据类型,刚学习java数组的小白们大多都会听到一句这样的话:java是纯面向对象的语言,它的数组也是一个对象。所以很多人就按照一个对象的方式来使用数组,后来你会发现,将数组作为一个类来使用在实现上是多么的“不自然”。下面就来全面了解一下关于java中数组的知识。
三哥
2018/08/20
1.6K0
完整的java数组操作应用知识汇总
Java数组(Array)
数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
全栈程序员站长
2022/09/08
6060
【 JavaSE 】 深入数组
目录 前言 一维数组 创建一维数组 一维数组的使用 数组作参数 认识 JVM 内存区域划分 数组做参数基本用法 理解引用类型 认识 null 数组作为方法的返回值 二维数组 二维数组的长度 二维数组的遍历 数组练习 ---- 前言 ---- 本章主要讲解: 一维数组的定义和使用 数组在内存的基本存储知识 二维数组的定义和使用 数组练习 一维数组 ---- 什么是数组: 数组本质上就是让我们能 "批量" 创建相同类型的变量(相同的类型) 注:特别是表示大量的数据,用数组非常便捷 创建一维数组 基本
用户9645905
2022/11/30
4120
【 JavaSE 】 深入数组
【Java探索之旅】基本类型与引用类型 数组的应用 二维数组
在上述代码中,a、b、arr,都是函数内部的变量,因此其空间都在main方法对应的栈帧中分配。a、b是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。
屿小夏
2024/04/18
1260
【Java探索之旅】基本类型与引用类型 数组的应用 二维数组
Java数组、排序和查找
创建一个char 类型的26 个元素的数组,分别放置’A’-‘Z’。使用for 循环访问所有元素并打印出来。提示:char 类型数据运算’A’+2 -> ‘C’
timerring
2023/04/21
9730
Java数组、排序和查找
Java数组详解(超全)
索引:命名规则、自动类型推断、静态动态初始化、多维数组的其他写法、常见错误写法、数组下标越界、默认值问题、数组长度问题、数组内存解析
全栈程序员站长
2022/09/08
4490
Java数组详解(超全)
【Java】——数组深度解析(从内存原理到高效应用实践)
数组是一种复合数据类型,它可以看作是一个容器,用于存储多个相同类型的变量。这些变量在内存中按顺序排列,每个变量都有一个唯一的索引,通过索引可以快速访问数组中的元素。在Java中,数组是对象,无论它存储的是基本数据类型还是引用数据类型。
User_芊芊君子
2025/04/08
850
【Java】——数组深度解析(从内存原理到高效应用实践)
java中数组的定义与使用
Java中的数组跟c语言的数组几乎不一样,我们要区分对待。在之后你就能理解到我为什么说这句话了。
E绵绵
2024/04/08
2620
java中数组的定义与使用
相关推荐
【Java篇】内存中的桥梁:Java数组与引用的灵动操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验