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程序员必备的11大IntelliJ插件(附地址)

    Java程序员必备的11大IntelliJ插件(附地址)

    这篇文章主要介绍了Java程序员必备的11大IntelliJ插件(附地址),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Spring Boot详解各类请求和响应的处理方法

    Spring Boot详解各类请求和响应的处理方法

    平时只是在用SpringBoot框架,但并没有详细研究过请求和响应执行的一个具体过程,所以本文主要来梳理一下SpringBoot请求和响应的处理过程
    2022-07-07
  • SLF4J报错解决:No SLF4J providers were found的问题

    SLF4J报错解决:No SLF4J providers were found的

    这篇文章主要介绍了SLF4J报错解决:No SLF4J providers were found的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 解决@SpringBootTest 单元测试遇到的坑

    解决@SpringBootTest 单元测试遇到的坑

    这篇文章主要介绍了解决@SpringBootTest 单元测试遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 跟我学Java Swing之游戏设计(1)

    跟我学Java Swing之游戏设计(1)

    跟我学Java Swing之游戏设计(1)...
    2006-12-12
  • Intellij IDEA命令行执行java无法加载主类解决方案

    Intellij IDEA命令行执行java无法加载主类解决方案

    这篇文章主要介绍了Intellij IDEA命令行执行java无法加载主类解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法

    Spring Cloud Ribbon 中的 7 种负载均衡策略的实现方法

    Ribbon 内置了 7 种负载均衡策略:轮询策略、权重策略、随机策略、最小连接数策略、重试策略、可用性敏感策略、区域性敏感策略,并且用户可以通过继承 RoundRibbonRule 来实现自定义负载均衡策略,对Spring Cloud Ribbon负载均衡策略相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • JAVA中使用openoffice将Excel转PDF再转图片功能的实现代码

    JAVA中使用openoffice将Excel转PDF再转图片功能的实现代码

    这篇文章主要介绍了JAVA中使用openoffice将Excel转PDF再转图片功能实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Java实现租车管理系统

    Java实现租车管理系统

    这篇文章主要为大家详细介绍了Java实现租车管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Java日常练习题,每天进步一点点(43)

    Java日常练习题,每天进步一点点(43)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07

最新评论