Java中数组与栈和堆之间的关系说明

 更新时间:2025年08月06日 14:51:53   作者:nsjqj  
文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性

Java中数组与栈和堆的关系

关于数组的定义这里就不做叙述,因为与C语言并无不同之处。

数组的初始化有三种方式:

int[ ] array1 = { 1, 2, 3, 4, 5 };
int[ ] array2 = new int[ ] { 1, 2, 3, 4, 5 };
int[ ] array3 = new int[10 ];

第一种和第二种它们两个没有区别,写哪个表示的含义都相同;第三个则类似C语言中的不完全初始化,只是给定了范围,里面的数字编译器默认会给0

关于数组在内存中的存储、上述的语法以及不同的数据类型所代表的默认值,如下图所示:

接下来的图描述了关于两个引用指向同一个对象时的内存栈和堆的分配情况,了解了这些才算是真正理解了数组。(JVM:Java虚拟机)

接下来我们来认识下null (空引用)。

在前面基本数据类型的方法的引用我们说过,基本数据类型传参时形参不会影响实参的值;但是今天要讲的引用数据类型的形参可以改变实参的值,先从一道例题来引入这个内容。

问:给定一个数组{ 1, 2,3, 4, 5 },将数组内的元素全部扩大两倍,怎么写?

下面是运行时的编译器的处理过程:

将其放在栈和堆上的表示方法:

那么问题来了,引用数据类型在调用方法时的形参一定会修改实参的值吗?

结论:不一定,看下图:

总结:一个引用,不能指向多个对象。否则有可能不会修改实参值。

遍历数组

还有一种遍历数组的方式:

这里使用了 Arrays的toString 方法,把传入的参数array表示的数组,以字符串的形式进行输出了

例题:给定数组{ 1, 2, 3, 4,   5,6 }求数组中元素的平均值;

接下来是一些编程小技巧

1. 在数组中使用循环时,往往循环的限制条件是数组长度减一(因为是从 0 下标开始) ,所以我们可以直接用 array.length - 1 来表示这个限制条件(length表示长度),如图:

2.我们在C语言时期知道二分查找是只能对于一个有序数组进行查找,那么如果是无序的、乱序的该怎么样进行排序呢,有两种方法:使用 Arrays.sort(array); 这个语句进行排序  或者  用循环来弄一个冒泡排序。(这里只讲语句排序)如图:

3.数组拷贝、数组部分拷贝、扩大数组。全部都各自一张图来表示:

使用 from - to 进行扩大(不用专门去写from和to,如果你写的正确,编译器会自动识别上去),取值范围是(   ];  ,例如本图是(1 ,3] 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java异步调用转同步的方法

    Java异步调用转同步的方法

    这篇文章主要介绍了Java异步调用转同步的方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • SSM框架实现分页和搜索分页的示例代码

    SSM框架实现分页和搜索分页的示例代码

    本篇文章主要介绍了SSM框架实现分页和搜索分页的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java实现解出世界最难九宫格问题

    Java实现解出世界最难九宫格问题

    这篇文章主要介绍了Java实现解出世界最难九宫格问题,芬兰数学家因卡拉花费3个月设计出了世界上迄今难度最大的数独游戏,而且它只有一个答案,本文使用Java实现解出,需要的朋友可以参考下
    2015-01-01
  • SpringBoot配置主从数据库实现读写分离

    SpringBoot配置主从数据库实现读写分离

    现在的 Web 应用大都是读多写少,本文主要介绍了SpringBoot配置主从数据库实现读写分离,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • sentinel流量控制框架(目录设置)

    sentinel流量控制框架(目录设置)

    Sentinel 是面向分布式服务架构的高可用流量防护组件帮助开发者保障微服务的稳定性,本文重点给大家介绍sentinel流量控制框架的相关知识,感兴趣的朋友一起看看吧
    2022-03-03
  • Java的HttpClient中使用POST请求传递参数两种常见方式

    Java的HttpClient中使用POST请求传递参数两种常见方式

    Apache HttpClient为开发者提供了丰富的接口,用于管理HTTP连接并执行请求,下面这篇文章主要介绍了Java的HttpClient中使用POST请求传递参数两种常见方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-06-06
  • Maven Spring jar包启动报错问题解决方案

    Maven Spring jar包启动报错问题解决方案

    maven 编译jar包,放在linux服务器启动不起来,提示:xxxx-0.0.1-SNAPSHOT.jar中没有主清单属性,接下来通过本文给大家分享问题原因及解决方案,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Springboot多种情况yml配置代码实例

    Springboot多种情况yml配置代码实例

    这篇文章主要介绍了Springboot多种情况yml配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java中使用MongoDB数据库实例Demo

    Java中使用MongoDB数据库实例Demo

    MongoDB是由C++语言编写的,基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是最接近于关系型数据库的NoSQL数据库,下面这篇文章主要给大家介绍了关于Java中使用MongoDB数据库的相关资料,需要的朋友可以参考下
    2023-12-12
  • SpringBoot在IDEA中实现热部署的步骤

    SpringBoot在IDEA中实现热部署的步骤

    这篇文章主要介绍了SpringBoot在IDEA中实现热部署的步骤,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-11-11

最新评论