1.数组的定义
数据类型[ ] 数组名 = new 数据类型[容量];
赋值左侧
数据类型:
告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类之后,整个数组
中保存的数据类型无法修改!!!
[]:
1. 告知编译器这里定义的是一个数组类型数据。
2. 明确告知编译器,数组名是一个【引用数据类型】
数组名:
1. 操作数据非常重要的数据!!!
2. 数组名是一个【引用数据类型】
数据类型:
前后呼应,告知编译器这里支持存储的数据类型到底是什么?
[容量]:
容量==> Capacity
告知编译器,当前数组中能够存放的对应数据类型的数据,最大存储多少个!!
【注意】
一旦确定容量,针对于当前数组,后期容量无法修改
2.数组的下标
规定
数组中的下标是从0开始,到数组的容量-1
例如:
数组容量10
有效下标范围:0 ~ 9
超出有效下标范围,都是无效的下标
3.数组内存分析图
![数组内存分析图](https://i-blog.csdnimg.cn/blog_migrate/676f5179d5af231e2459e7b8ea426441.png)
因为数组还有length属性,所以上图中数组所占的内存堆区的大小是大于40的
4.数组中的内存转转移问题
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8e0d9ea7f7accb79c4b7ce0dd1486665.png)
图中 arr1 = arr2;
其实是将 arr2 的地址赋值给 arr1,所以导致数组arr1 会指向 arr2数组所在的堆区地址,所以之后对
数组arr1 的操作一样会影响到数arr2;
5.数组案例
找出指定元素在指定数组中所有下标位置
6.代码
public class Demo3 {
public static void main(String[] args) {
int[] arr = {5, 3, 5, 7, 5, 1, 3, 5, 7, 9};
int[] indexArr = new int[arr.length];
int count = allIndexOf(arr, indexArr, 5);
for (int i = 0; i < count; i++) {
System.out.println(indexArr[i]);
}
}
public static int allIndexOf(int[] arr, int[] indexArr, int find) {
if (arr.length > indexArr.length) {
System.out.println("Input Parameter is Invalid!");
return 0;
}
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (find == arr[i]) {
indexArr[count] = i;
count += 1;
}
}
return count;
}
}