Java可变参数与数组
2022-08-04 本文已影响0人
Tinyspot
1. 可变参数
- 可接收多个同类型实参,本质是一个数组
- 语法:数据类型... 形参名
- 必须定义在参数列表的最后,且一个方法只能有一个可变参数
Class<?>... parameterTypes
Class<?>[] types
可变参数和数组作为方法参数时的区别:
- 可变参数只能有一个,数组可以有多个
- 可变参数只能定义在参数列表的末尾,数组可以在任何位置
- 可变参数可以传数组、null、0个参数、一到多个参数;数组可以传数组引用、数组对象、null
2. 数组
- 特点:一段连续的内存空间,相同数据类型,可根据索引查询
- 数组创建
- 数组扩容
- 数组复制
2.1 数组内存分析
数组属于引用类型,存储在堆中,栈中存储的是堆中数组的引用(地址)
2.2 数组创建
方式一:先声明,再分配空间
int[] values;
values = new int[10];
方式二:声明并分配空间
int[] values = new int[10];
values[0] = 1;
方式三:声明并赋值(简 / 繁)
int[] values = {1, 2};
int[] values = new int[] {1, 2};
2.3 数组的复制
int[] values = {11, 22, 3, 4, 5};
// more是升序
Arrays.sort(values);
System.out.println(Arrays.toString(values));
System.arraycopy(array, 0, array2, 2, 2);
2.5 数组倒置
/**
* 数组倒置:
* 第一个数与倒数第一个数交换
* 第二个数与倒数第二个数交换
* 以此类推
*
* 交换的次数看数量是奇数还是偶数
*/
public void inverse() {
int[] nums = {1, 2, 3, 4, 5};
for (int i = 0; i < nums.length / 2; i++) {
int temp = nums[i];
nums[i] = nums[nums.length - 1 - i];
nums[nums.length - 1 -i] = temp;
}
System.out.println(Arrays.toString(nums));
}
2.6 main()
- 自 JDK1.5 引入动态参数后,String[] 数组也可以使用String... args来实现
3. 二维数组
概念:一维数组中的一维数组;数组中的元素还是数组
查找元素需要两个下标, X[n][m]
第 n 行 第 m 列
int [][] nums = new int [3][5];
nums.length // 3
nums[0].length // 5
二维数组的遍历
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {}
}
3.1 二维数组的内存分配
image.png高维数组中的每一个元素,保存了低维数组的地址
例如:访问 array[0] 等价于在访问 0x0000A111
3.1 N 维数组
- N 维数组有 n 个 []
4. 地址的复制
- 基本数据类型变量存储值
- 引用数据类型变量存储地址值
- num = newNum, 将新数组的地址复制给 num, 后续操作 num 时,相当于操作 newNum
4.1 数组类型参数
- 基本数据类型传递:值传递。一方改变不会影响另一方
- 引用数据类型传递:值传递(地址值)。一方改变影响另一方