[正式学习java②]——数组的基本使用,java内存图与内存分配

简介: [正式学习java②]——数组的基本使用,java内存图与内存分配

一、数组的两种初始化方式

1.完整格式(静态初始化)

数据类型[] 数组名 = new 数据类型[]{元素1,元素2…};

//范例
int[] arr = new int[]{1,2,3,4};

简化书写

一般我们会省略=后面的 new 数据类型[]

int[] arr = {1,2,3,4};

2.动态初始化

当不知道数组里面的初始值的时候,我们就要采用动态初始化

//申请一个长度为10的int类型的数组
int[] arr = new int[10];

区别:

动态初始化的数组有初始值

整数 -> 0 浮点数 -> 0.0 引用数据类型 -> null

布尔 -> false 字符型 -> 0

静态初始化不带长度,(自动计算)

二、数组的遍历方式

通过索引循环遍历

int[] arr = {1,2,3,4};
for(int i = 0; i<arr.length(); i++){
    System.out.println(arr[i]);
}

当然还有别的方法,我们先混个眼熟

//增强for,对于数组来说,本质与普通for相同
for (int i : arr) {
    System.out.println(i);
}
//以字符串的形式展示
System.out.println(Arrays.toString(arr));

三、数组的开辟与访问

开辟:在堆上开辟一块新空间,将地址返回给数组名

访问:数组名[索引]

四、数组的注意事项

1.数组直接打印打印的是地址值

System.out.println(arr)打印的就是arr的地址值,因为地址也是一个数嘛 printf就是负责打印

2.数组在内存图中的位置

定义数组是通过new关键字,new关键字定义的所有对象都是在堆上开辟空间的

所以下面的结果是什么 是true还是false

int[] arr1 = {1,2,3}; int[] arr2 = {1,2,3};

arr1 == arr2 // true  or  false ???

比较的是地址值为false

3.数组一旦开辟了空间长度是不可变的

虽然java弱化了指针与地址的概念,但是C的内存机制是最基础最底层的原理

4.区分数组长度为0 和 数组 == null的概念

数组长度为0 是指定义了一个长度为0的数组

数组 == null是指数组的地址为null,也就是空指针

5.理解数组越界的概念

从内存的角度理解数组越界的概念

五、java内存分配

栈:方法运行会加载进栈,局部变量会在栈上开辟空间

堆:使用new关键字创建的对象,都在这开辟空间

方法区:存储class文件

寄存器与本地方法栈:我们暂时不需要了解

一个简单的java程序,运行时的内存图

①加载Test2 class文件到本地方法区

②main方法为主入口,main方法进栈

③调用show方法,show方法进栈

④show调用完出栈

④为变量a在栈上开辟空间

⑤输出a

六、总结

数组何时用动态初始化、何时用静态

数组是在哪里开辟空间的

数组名==数组名比较的是什么

相关文章
|
10月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1146 3
|
10月前
|
存储 人工智能 搜索推荐
一种专为AI代理设计的内存层,能够在交互过程中记忆、学习和进化
Mem0 是专为 AI 代理设计的内存层,支持记忆、学习与进化。提供多种记忆类型,可快速集成,适用于开源与托管场景,助力 AI 代理高效交互与成长。
914 123
一种专为AI代理设计的内存层,能够在交互过程中记忆、学习和进化
|
9月前
|
Java 大数据 Go
从混沌到秩序:Java共享内存模型如何通过显式约束驯服并发?
并发编程旨在混乱中建立秩序。本文对比Java共享内存模型与Golang消息传递模型,剖析显式同步与隐式因果的哲学差异,揭示happens-before等机制如何保障内存可见性与数据一致性,展现两大范式的深层分野。(238字)
281 4
|
9月前
|
存储 缓存 Java
【深入浅出】揭秘Java内存模型(JMM):并发编程的基石
本文深入解析Java内存模型(JMM),揭示synchronized与volatile的底层原理,剖析主内存与工作内存、可见性、有序性等核心概念,助你理解并发编程三大难题及Happens-Before、内存屏障等解决方案,掌握多线程编程基石。
|
10月前
|
缓存 监控 Kubernetes
Java虚拟机内存溢出(Java Heap Space)问题处理方案
综上所述, 解决Java Heap Space溢出需从多角度综合施策; 包括但不限于配置调整、代码审查与优化以及系统设计层面改进; 同样也不能忽视运行期监控与预警设置之重要性; 及早发现潜在风险点并采取相应补救手段至关重要.
1068 17
|
10月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3429 0
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
1154 1