初始化
初始化方式:动态初始化(指定长度)、静态初始化(指定内容)
使用建议:数组内容确定则使用静态初始化,反之使用动态初始化
1、动态初始化:数据类型[] 数组名称=new 数据类型[数组长度];
2、静态初始化,标准格式:数据类型[] 数组名称=new 数据类型[]{数组元素};
3、静态初始化,省略格式:数据类型[] 数组名称={数组元素};
静态初始化是编译器支持的一种语法糖,允许以更简洁的方式初始化数组,而不需要显式地调用new
虽然在语法上不使用new
关键字,但在底层实现上,JVM仍会执行类似于动态初始化的内存分配和初始化操作
- 静态初始化,依然存在有默认值的过程,自动推算得到长度
int[] arr = {128, 256};
System.out.println(arr.length); // 2
- 三种初始化方式,只有静态初始化省略格式不能拆成两个步骤
public void method(String[] args) {
int[] arr;
arr = new int[1];
arr = new int[]{10, 20};
// arr = {100, 200}; // 标红报错 Array initializer is not allowed here
}
数组名
引用数据类型的变量名,存的都是其对象的地址值
打印输出数组名得到内存地址、集合名得到集合内容
ArrayList的父类AbstractList的父类AbstractCollection重写了toString()方法
int[] arr1 = new int[5];
double[] arr2 = new double[]{5.0, 6.0, 7.2, 8.6};
/*
* 控制台输出的字符串是对象的内存地址哈希值
* 指示该数组在内存中的位置,简称内存地址值
* "["代表数组,"I"和"D"分别表示数组中元素的数据类型
* "@"后面的一串字母数字是用16进制表示的地址值
* */
System.out.println(arr1); // [I@4554617c
System.out.println(arr2); // [D@74a14482
对于 char 型数组,打印数组名,输出的是数组中全部元素的值
输出 char 型数组的引用,必须让数组名和空字符串做并置运算
char[] arr = {'我', '爱', '中', '国'};
System.out.println(arr); // 我爱中国
System.out.println(arr + ""); // [C@30c7da1e
- 数组作为方法的参数,传进去的是数组的地址值
- 数组作为方法的返回值,返回的是数组的地址值
int[] arr = {10, 210, 15, 30, 80}; // 最大值210,最小值10
System.out.println("传入数值:" + arr); // [I@3d24753a
int[] result = getMinAndMaxOfIntArray(arr);
System.out.println("返回结果:" + result); // [I@59a6e353
// 定义方法三要素:返回值类型、方法名、参数列表
// 返回int[]数组的最大值、最小值
public static int[] getMinAndMaxOfIntArray(int[] arr) {
System.out.println("方法参数:" + arr); // [I@3d24753a
int max = arr[0];
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
max = arr[i] > max ? arr[i] : max;
min = arr[i] < min ? arr[i] : min;
}
int[] maxAndMin = {max, min};
System.out.println("方法返回值:" + maxAndMin); // [I@59a6e353
return maxAndMin;
}