本文主要是介绍Java中数组与栈和堆之间的关系说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性...
Java中数组与栈和堆的关系
关于数组的定义这里就不做叙述,因为与C语言并无不同之处。
数组的初始化有三种方式:
int[ ] array1 = { 1, 2, 3, 4, 5 };
int[ ] array2 = new int[ ] { 1, 2, 3, 4, 5 };
int[ ] arra编程y3 = new int[10 ];
第一种和第二种它们两个没有区别,写哪个表示的含义都相同;第三个则类似C语言中的不完全初始化,只是给定了范围,里面的数字编译器默认会给0。
关于数组在内存中的存储、上述的语法以及不同的数据类型所代表的默认值,如下图所示:
接下来的图描述了关于两个引用指向同一个对象时的内存php栈和堆的分配情况,了解了这些才算是真正理解了数组。(JVM:Java虚拟机)
接下来我们来认识下null (空引用)。
在前面基本数据类型的方法的引用我们说过,基本数据类型传参时形参不会影响实参的值;但是今天要讲的引用数据类型的形参可以改变实参的值,先从一道例题来引入这个内容。
问:给定一个数组{ 1, 2,3, 4, 5 },将数组内的元素全部扩大两倍,怎么写?
下面是运行时的编译器的处理过程:
将其放在栈和堆上的表示方法:
那么问题来了,引用数据类型在调用方法时的形参一定会修改实参的值吗?
结论:不一定,看下图:
总结:一个引用,不能指向多个对象。否则有可能不会修改实参值。
遍历数组
还有一种遍历数组的方式:
这里使用了 Arrays的toString 方法,把传入的参数array表示的数组,以字符串的形式进行输出了
例题:给定数组{ 1, 2, 3, 4, 5,6 }求数组中元素的平均值;
接下来是一些编程小技巧
1. 在数组中使用循环时,往往循环的限制条件是数组长度减一(因为China编程是从 0 下标开始) ,所以我们可以直接用 array.length - 1 来表示这个限制条件(length表示长度),如图:
2.我们在C语言时期知道二分查找是只能对于一个有序数组进行查找,那么如果是无序的、乱序的该怎么样进行排序呢,有两种方法:使用 Arrays.sort(array); 这个语句进行http://www.chinasem.cn排序&nbjssp; 或者 用循环来弄一个冒泡排序。(这里只讲语句排序)如图:
3.数组拷贝、数组部分拷贝、扩大数组。全部都各自一张图来表示:
使用 from - to 进行扩大(不用专门去写from和to,如果你写的正确,编译器会自动识别上去),取值范围是( ]; ,例如本图是(1 ,3]
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。
这篇关于Java中数组与栈和堆之间的关系说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!