Java数组的全面介绍,全方面理解Java数组

数组的相关知识
一、数组的概述
1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
2.数组相关的概念:

数组名
元素
角标、下标、索引
〉数组的长度:元素的个数
3.数组的特点:数组是有序排列的
4.数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
5.创建数组对象会在内存中开辟一整块连续的空间

一维数组的使用

1.一维数组的声明和初始化

  • 声明
int[] arr1 ; //声明一个int型的数组
double[] arr2; //声明一个double型的数组
String[] arr3;//声明一个String型的数组
  • 初始化
    静态初始化:数组的初始化和数组的元素赋值操作同时进行。
int[] arr1;//声明一个arr1的数组
arr1 = new int[] {1,2,3}; //创建了一个长度为3的int型数组

动态初始化:数组的初始化和数组的元素的赋值操作分开进行

double[] arr2 = new double[3];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;

总结:一旦数组的初始化后它的长度也就确定了。
2.如何调用数组的指定位置的元素
通过角标(索引)

int[] arr1;
arr1 = new int[] {1,2,3};
System.out.println("这三个元素的值是"+arr1[0]+ " "+arr1[1]+" "+arr1[2]);//通过角标调用

3.如何获取数组的长度,调用数组中的length属性,比如

double[] arr2 = new double[3];
System.out.print("此数组的长度是:+arr2.length)

结果如下:

java数组在哪个包 java的数组_初始化


4.如何遍历数组

double[] arr2 = new double[3];
for(int i = 0;i <arr2.length;i++) {
			System.out.println(arr2[i]);
}

大家可以猜一猜输出的结果是多少?

5.数组元素的默认初始化值
上面的结果是三个0.0你猜对了吗?在给初始化double型数组时,内存就默认给数组的每个元素为0.0。

  • 数组元素整型(int、short、byte、long),默认初始化值是0
int[] a1 = new int[2];
		byte[] a2 = new byte[2];
		long[] a3 = new long[2];
		short[] a4 = new short[2];
		System.out.println(a1[0]+" "+a2[0]+" "+a3[0]+" "+a4[0]);

结果为:0 0 0 0

java数组在哪个包 java的数组_初始化_02

  • 元素是浮点型(float、double),默认初始化值为0.0
float[] a1 = new float[2];
		double[] a2 = new double[2];
		System.out.println(a1[0]+" "+a2[0]);

结果如下:

java数组在哪个包 java的数组_初始化_03

  • 数组元素是char型的,默认初始值是\u0000(0)
char[] a1 = new char[2];
		System.out.println("结果是:"+a1[0]);
		System.out.println("=========================");
		if(a1[0]==0) {
			System.out.println("结果为零");
		}

结果如下:

java数组在哪个包 java的数组_java_04


这里的结果没有显示出来,但是我们用if语句证明了这里输出的结果是0(不是数字零,而是ASCII码中的零).

  • 数组元素是引用型的,默认初始值为null\
String[] a1 = new String[2];
		System.out.println("结果是:"+a1[0]);

java数组在哪个包 java的数组_数组_05


6.一维数组的内存解析

首先我们通过一张图来了解一下,数据在计算机内存是怎么存储的

java数组在哪个包 java的数组_java数组在哪个包_06


首先,我们来看下这段代码

int[] arr = new int[]{1,2,3};
String[] arr1 = new String[4];
arr1[1] = "刘德华";
arr1[2] = "张学友";
arr1 = new String[3];
System.out.print(arr[1]);

下面我们来解释以下这段代码:

首先int[] arr = new int[]{1,2,3};,在堆(heap)中开辟一个内存空间,

arr指向这个内存空间的地址(数组的首地址),并将1,2,3赋值。

String[] arr1 = new String[4];同样在堆(heap)中开辟了一个内存空间,并将默认初值赋为null,接着执行语句arr1[1] = "刘德华";arr1[2] = "张学友";将arr1[1]、arr1[2]分别赋值为“刘德华”、“张学友”。

java数组在哪个包 java的数组_初始化_07


二维数组、多维数组的使用(主要介绍二维)

1.二维数组的声明和初始化.

  • 声明
    int[][] arr1int arr1 [][]
  • 初始化
    静态初始化:
    int[][] arr = new int[][] {{1,2,3},{4,5},{6,7,8},{9,10,11,12}}; 看图理解:
  • java数组在哪个包 java的数组_数组_08

  • 动态初始化
    int[][] arr1 = new int[3][];int[][] arr1 = new int[3][2]; 2.如何调用数组指定位置的元素

在第一个[]中输入行,在第二个[]输入列,但注意从0开始

int[][] arr = new int[][] {{1,2,3},{4,5},{6,7,8},{9,10,11,12}};
		System.out.println(arr[2][1]);

3.如何获取数组的长度

int[][] arr = new int[][] {{1,2,3},{4,5},{6,7,8},{9,10,11,12}};
		System.out.println(arr.length);
		System.out.println(arr[1].length);

第一个结果是arr的数组长度,第二个结果是arr[1]的数组长度。

java数组在哪个包 java的数组_System_09


4.如何遍历数组。

例:

int[][] arr = new int[][] {{1,2,3},{4,5},{6,7,8},{9,10,11,12}};
		for(int i=0;i<arr.length;i++) {
			for(int j=0;j<arr[i].length;j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}

结果为:

java数组在哪个包 java的数组_java_10


5.数据元素的默认初始化值。

我们来看一下:

int[][] arr1 = new int[3][2];
		System.out.println(arr1[0]);

这是它的结果:

java数组在哪个包 java的数组_初始化_11


很明显这是一个地址值,[表示一维数组,I表示int型

我们再来看下另一种情况:

int[][] arr2 = new int[3][];
		System.out.println(arr2[0]);

结果为null:

java数组在哪个包 java的数组_初始化_12


总结:

针对于初始化方式一:比如:int[][]arr=new int[4][3];

外层元素的初始化值为:地址值

内层元素的初始化值为:与一维数组初始化情况同针对于初始化方式二:比如:int[][]arr=new int[4][];

外层元素的初始化值为:null

内层元素的初始化值为:不能调用,否则报错

6.二维数组的内存解析

java数组在哪个包 java的数组_数组_13


如图:

这里先int[][] arr1 = new int[4][];在栈中申请了arr1,在队中申请了一个二维数组,不过二维数组的元素是引用型,所以默认初始化值为null。

然后,arr1[1] = new int[]{1,2,3}将arr1[1]在队中又申请了一个内存空间,长度为3个int字节,arr1[1]指向它;arr11[2] = new int[4],在队中申请了长度为三个int字节的内存空间,arr1[2]指向它;第四步是赋值操作,类似一维数组。