-
创建数组
基本语法
// 动态初始化
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };
// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };
代码示例
int[] arr = new int[]{1, 2, 3};
int[] arr = {1, 2, 3};
- 1
- 2
遍历数组
for循环
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
- 1
- 2
- 3
- 4
for-each
int[] arr = {1, 2, 3};
for (int x : arr) {
System.out.println(x);
}
- 1
- 2
- 3
- 4
引用
引用本质上只是存了一个地址,java将数组设置为引用类型,进行数组传参时,只是将数组的地址传入函数参数中,可以避免整个数组的拷贝因为数组比较大时,拷贝开销就很大。
null
null在java中表示空引用,无效的引用
null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出NullPointerException.
Java 中并没有约定 null 和 0 号地址的内存有任何关联
重点:数组拷贝
1. Arrays.copyOf()
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
//参数1:拷贝的数组
//参数2:拷贝的长度
int[] arr1=Arrays.copyOf(arr,arr.length); System.out.println(Arrays.toString(arr1));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2. System.arraycopy()
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int[] arr1=new int[arr.length];
/*
* 参数1:源数组
* 参数2:源拷贝位置
* 参数3:目的数组
* 参数4:目的拷贝位置
* 参数5:拷贝大小
*/
System.arraycopy(arr,0,arr1,0,arr.length);
System.out.println(Arrays.toString(arr1));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3. clone()
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int[] arr1=arr.clone();
System.out.println(Arrays.toString(arr1));
}
- 1
- 2
- 3
- 4
- 5
4. for循环
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int[] arr1=arr.clone();
for (int i=0;i<arr.length;i++){
arr1[i]=arr[i];
}
System.out.println(Arrays.toString(arr1));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
深浅拷贝
深拷贝
在堆内存中分配新空间,将之前的数组堆内存中的内容拷贝到新的空间中。
针对简单类型/基本类型,修改拷贝后的数组的下标的元素的时候,不会影响原数组对应元素的值
int[] arr={1,2,3,4,5};
int[] ret=new int[arr.length];
for (int i=0;i<arr.length;i++){
ret[i]=arr[i];
}
System.out.println("原数组:"+Arrays.toString(arr));
System.out.println("拷贝数组:"+Arrays.toString(ret));
ret[0]=6;
System.out.println("修改元素后原数组:"+Arrays.toString(arr));
System.out.println("修改元素后的拷贝数组:"+Arrays.toString(ret));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
浅拷贝
在堆内存中不会分配新的空间,而是增加一个引用变量和之前的引用指向相同的堆空间。
修改拷贝后的数组的下标的元素的时候,会影响原数组对应元素的值
int[] arr={1,2,3,4,5};
int[] ret=arr;
System.out.println("原数组:"+Arrays.toString(arr));
System.out.println("拷贝数组:"+Arrays.toString(ret));
ret[0]=6;
System.out.println("修改元素后原数组:"+Arrays.toString(arr));
System.out.println("修改元素后的拷贝数组:"+Arrays.toString(ret));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
基本语法
原文章:
数据类型[][] 数组名称 = new 数据类型 [][] { 初始化数据 };
四种定义方式
int[][] arr1={{1,2,3},{4,5,6}};
int[][] arr2=new int[][]{{1,2,3},{4,5,6}};
int[][] arr3=new int[2][3];
int[][] arr4=new int[2][];//不规则数组