目录
1. 数组的定义
数组是一种用于存储相同类型数据的容器。数组的大小是固定的,一旦创建就无法更改。数组可以存储基本数据类型(如int、float、char、string)或引用类型(如对象)。
数组分为一维数组和二维数组,一维数组类似数轴,每个元素占一个空间,二维数组是数组的数组,用来表示矩阵或表格数据。
2. 数组的初始化
2.1 静态初始化
静态初始化是指在声明数组的同时直接赋予数组初始值。这种方式适用于在数组声明时就已经知道数组元素的具体值的情况,简洁且易于理解。
int[] arr1=new int[]{1,2,3,4,5};
int[] arr2={1,2,3,4,5};
上述两种方式都是静态初始化,第一种为完整,第二种较为简洁。格式为 数据类型[] 数组名 = {元素1,元素2} 。
也可以对字符串等其他类型数组进行初始化。
String[] fruits = {"Apple", "Banana", "Cherry"};
这种初始化的特点就是
1.数组的长度由初始化时的元素个数自动确定,不需要手动指定。
2.初始化方式简洁明了,适用于在定义数组时就能确定初始值的场景。
3. 在数组声明的同时完成赋值,不需要逐个赋值操作。
2.2 动态初始化
指在声明数组时先指定数组的长度,然后在运行时通过程序逻辑或条件为数组元素赋值。这种方式适用于当数组的初始值在程序运行过程中才确定的情况。
格式为 数据类型[] 数组名 = new 数据类型[数组长度];
public class Demo {
public static void main(String[] args){
int[] array = new int[5];
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=4;
array[4]=5;
}
}
这种初始化的特点是
1.数组元素的值可以根据运行时的条件、计算结果或用户输入等动态确定。
2.适用于数组的初始值在编写代码时不确定的情况,可以根据程序的具体需求进行赋值。
3.与静态初始化不同,动态初始化的数组在创建时只有长度确定,元素的具体值需要手动赋值。
与静态初始化的使用要区分开来,灵活运用。
3. 数组的使用
要用会使用数组,就要知道数组的索引(index),例如array[0]指的是数组中的第一个元素,索引从0开始,此外,数组有一个属性——length,它指的是数组的元素个数,length-1就是索引的最大值,超出最大索引值的元素全被赋予为null,即空值。
此外可以通过length来完成对数组的遍历。
public class Demo {
public static void main(String[] args){
int[] array = {1,2,3,4,5};
for(int i=0;i<array.length;i++){
System.out.println("数组的第"+(i+1)+"个元素是"+array[i]);
}
}
}
结果如下
此外,数组创建后里面的元素是可以修改,删除的,极大的方便了数组的后续使用。
4. 数组的内存视图
数组在内存中是连续存储的,这意味着数组的所有元素依次存放在相邻的内存地址中,每个元素占据相同大小的内存空间。
public class Demo {
public static void main(String[] args){
int[] array = {10,20,30,40};
System.out.println(array);
}
}
这是数组的初始地址,为[I@10f87f48,这是哈希码
[
:表示这是一个数组。[
是一个特殊的符号,表示这个对象是一个数组类型。
I
:表示数组的元素类型。Java 中的一些常见类型符号包括:
I
表示int
类型。D
表示double
类型。F
表示float
类型。J
表示long
类型。B
表示byte
类型。C
表示char
类型。Z
表示boolean
类型。L<class name>;
表示一个对象类型,<class name>
是类的完整名称。在这个例子中,
I
表示这是一个int
类型的数组。
@
:分隔符,用于分隔类型信息和哈希码。
10f87f48
:这是该数组对象的哈希码的十六进制表示。这个值是基于数组对象的内存地址生成的,但它并不直接是内存地址。
如果将一个数组赋值给另一个数组,二者所指向的内存空间是一致的,是原数组的空间,此外空间分配时,各个变量的空间不会重复。