在之前的文章中我们有提到过java中的数组是引用数据类型变量,那么它具体有哪些特点呢?接下来就由小编来带大家梳理一下吧
目录
一、数组的基本概念
1、数组的创建及初始化
创建数组的语法格式为:
数据类型[] 数组名 = new 数据类型[N];
举例如下:
int[] array1 = new int[5]; // 创建一个可以容纳5个int类型元素的数组
double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组
String[] array3 = new double[5]; // 创建一个可以容纳5个字符串元素的数组
而数组的初始化主要分为动态初始化以及静态初始化两种:
1、动态初始化
即在创建数组是直接确定了元素的个数,例如:
int[] array=new int[10];//创建了一个长度为10的整型数组
2、静态初始化
即在创建数组时没有直接指定数据元素个数,而直接指定了具体的数据内容:
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3......};
例如:
int[] array=new int[]{1,2,3,4,5};
注意:
1、静态初始化时可以省略“new 数据类型[]”,即直接“数据类型[] 数组名 = {数据1,数据2,数据3......};”
2、静态初始化虽然没有给出数组长度,但是编译器编译时会根据{}中元素个数来确定数组的长度
3、静态初始化时{}内数据类型必须与定义数组的数据类型保持一致
4、若数组没有初始化,数组中的元素会有默认值,如下
2、数组的遍历访问
所谓遍历,即依次访问数组中的每一个元素,我们最自然的想法便是用for循环来遍历:
int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
但是我们得注意一点,如果我们并不知道需要遍历的数组的长度该怎么办?幸好在java中可以通过 数组对象.length来获取数组的长度,如下:
int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
这样代码显然就变得更加灵活了,同时也可以用for循环的另一种形式for-each语句:
int[] array = {1, 2, 3};
for (int x : array) {
System.out.println(x);
}
相比于for循环,能够更方便的完成对数组的遍历.,可以避免循环条件和更新语句写错
二、数组的引用类型特质
1、基本类型变量与引用类型变量的区别
我们先得介绍一下JVM的内存分布特点:
我们可以看到JVM内存主要被分为了五个部分,那么为什么要把一个大内存划分开来呢?主要就是为了更好的管理,每一个区都有各自的职责。而为了探讨基本类型变量与引用类型变量的区别,这篇文章我们就先主要介绍java虚拟机栈和堆的作用
- 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含 有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
- 堆(Heap): JVM所管理的最大内存区域. 使用 new 创建的对象都是在堆上保存 (例如前面的 new int[]{1, 2, 3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销 毁
如果光看概念是不是一脸懵,其实用大白话讲就是:
- 虚拟机栈存储的就是局部变量
- 堆存储的是对象
例如如下代码:
public class Text {
public static void main(String[] args) {
int[] array=new int[10];
int a=10;
int b=20;
}
}
其在栈堆上存储如下:
可以看出像变量a、b这样的基本数据类型创建的变量,在空间中直接存放的是其所对应的值;而像arr数组这样的引用数据类型创建的变量,其空间中存储的是对象所在空间的地址。
以下程序可以更直观的反映这一特点:
public class Text {
public static void main(String[] args) {
int[] array={1,2,3,4,5};
System.out.println(array);
}
}
我们可以看到在直接输出数组array的值时输出了一串奇怪的字符,其具体解释如下:
而这一串的最终目的就是指向一个对象,这反映了引用数据在存储时的最大特点,即在栈上存储了一块堆的地址,在对应的堆上存储相应的对象。
总结
本篇文章中简单介绍了Java数组的基础用法,及数组为代表的引用数据类型与基本数据类型的区别,至于数组的一些进阶应用,就留到下一篇文章来介绍吧
那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊