首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:容器概述
第二章:数组简介
第三章:数组的声明和初始化
第四章:数组元素的访问
第五章:数组的遍历
第六章:数组元素的默认值
第七章:数组内存示意图
第八章:数组练习题
第九章:二维数组
第十章:Arrays工具的使用
第十一章:数组使用中的常见异常
当前位置:
首页>>
技术小册>>
Java语言基础4-数组详解
小册名称:Java语言基础4-数组详解
7.1 内存概述 - 内存是计算机中重要的部件之一,它是和 CPU 进行沟通的桥梁。其作用是暂时存放 CPU 中运算的数据,以及和硬盘等外部存储设备交换数据。只要计算机在运行中,CPU 就会将需要运算的数据调到内存中进行运算,当运算完成后 CPU 再将结果传送出来。 - 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。 - Java 虚拟机要运行程序,必须要对内存进行空间的分配和管理。 7.2 Java虚拟机的内存划分 - 为了提高运算效率,就需要对内存空间进行不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 ![](/uploads/images/20230724/09d9aa1e3fcb5d8e07b642022737b198.png) ![](/uploads/images/20230724/4abead25e437c1dad8f598dc2c82b50c.png) 7.3 数组在内存中的存储 7.3.1 一个数组内存图 ```bash /** * 一个数组内存图 * * @author maxiaoke.com * @version 1.0 */ public class ArrayTest3 { public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr); // [I@5f150435 } } ``` ![](/uploads/images/20230724/23dc9d79963b7dc4fc81cb7efd976820.png) - 问:打印 arr 是 [I@5f150435 ,它是数组的地址吗? - 答:它不是数组的地址。 - 问:不是说 arr 中存储的是数组对象的首地址吗? - 答:arr 中存储的是数组的首地址,但是因为数组是引用数据类型,打印 arr 时,会自动调用 arr 数组对象的 toString() 方法,默认该方法实现的是对象类型名@该对象的hashCode()值的十六进制值。 - 问:对象的 hashCode 值是否就是对象内存地址? - 答:不一定,因为这个和不同品牌的 JVM 产品的具体实现有关。例如:Oracle 的 JDK 中给出了 5 种实现,其中有一种是直接返回对象的内存地址,但是 OpenJDK 默认没有选择这种方式。 7.3.2 数组的下标为什么从0开始? - 因为第一个元素距离数组首地址间隔 0 个单元。 7.3.3 两个数组内存图 ```bash /** * 两个数组内存图 * * @author maxiaoke.com * @version 1.0 */ public class ArrayTest4 { public static void main(String[] args) { int[] arr = new int[3]; int[] arr2 = new int[2]; System.out.println(arr); System.out.println(arr2); } } ``` ![](/uploads/images/20230724/21cb77dde7b10d50954c8fa53c69908c.png) 7.3.4 两个变量指向同一个数组 ```bash /** * 两个数组指向同一个数组 * * @author maxiaoke.com * @version 1.0 */ public class ArrayTest5 { public static void main(String[] args) { // 定义数组,存储3个元素 int[] arr = new int[3]; //数组索引进行赋值 arr[0] = 5; arr[1] = 6; arr[2] = 7; //输出3个索引上的元素值 System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); //定义数组变量arr2,将arr的地址赋值给arr2 int[] arr2 = arr; arr2[1] = 9; System.out.println(arr[1]); } } ``` ![](/uploads/images/20230724/e7cda7920314490eb490055d12d7ad16.png)
上一篇:
第六章:数组元素的默认值
下一篇:
第八章:数组练习题
该分类下的相关小册推荐:
Java并发编程
Java必知必会-Maven初级
Mybatis合辑2-Mybatis映射文件
深入拆解 Java 虚拟机
Java语言基础10-Java中的集合
Java语言基础15-单元测试和日志技术
Mybatis合辑4-Mybatis缓存机制
Java语言基础11-Java中的泛型
Java语言基础7-Java中的异常
Java语言基础5-面向对象初级
Java必知必会-JDBC
Java性能调优实战