for-each循环遍历数组 (当只遍历数组,不修改数组元素)
目录
for-each循环遍历数组 (当只遍历数组,不修改数组元素)
数组的基本用法
基本语法格式
// 动态初始化
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };
int[] data = new int[3];
int[] arr = new int[]{1, 2, 3};
// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };
int[] data = {1,2,3};
int[] arr = new int[3];创建一个长度为3的整型数组,每个元素都是整型的默认值
数组的访问和长度
取得一个数组的长度,数组名称.length
取得数组元素arr[index] ->index是索引
int[] arr = new int[] {1, 2, 3};
System.out.println(arr.length);//输出3
System.out.println(arr[1]);//输出2
下标访问操作不能超出有效范围 [0, length - 1] , 如果超出有效范围, 会出现下标越界异常
数组的遍历
for循环遍历数组
int[] arr = new int[] {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//输出
1
2
3
for-each循环遍历数组 (当只遍历数组,不修改数组元素)
int[] arr = new int[] {1, 2, 3};
for (int x : arr) {
System.out.println(x);
}
//输出
1
2
3
数组作为方法的参数
理解引用类型
认识null
null
在
Java
中表示
"
空引用
" ,
也就是一个无效的引用
当引用数据类型保存的值为null,表示该引用没有指向任何内存空间,如果使用该引用去访问内存,就会报错
public class Test {
public static void main(String[] args) {
int[] arr = null;
System.out.println(arr[0]);
}
}
//输出
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:9)
参数传内置类型
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a,b);
//输出
a=10
b=20
System.out.println("a="+a);
System.out.println("b="+b);
}
public static void swap(int a, int b) {
int temp = a;
a =b;
b =temp;
}
}
- 修改形参的值, 不影响实参的值
参数传数组类型
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fun(arr);
System.out.println("arr[0] = " + arr[0]);
}
public static void fun(int[] a) {
a[0] = 10;
System.out.println("a[0] = " + a[0]); //a[0]=10
}
}
//输出
a[0] = 10
arr[0] = 10
- 在函数内部修改数组内容,函数外部也发生改变
- 此时数组名 arr 是一个 "引用",当传参的时候, 是按照引用传参
引用就是对实体起了个名字, "引用" 本质上只是存了一个地址,Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中,这样可以避免对整个数组的拷贝
数组作为方法的返回值
写一个方法, 将数组中的每个元素都 *2,不破坏原有数组
public class Test {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
int[] output = transform(arr);
printArray(output);
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static int[] transform(int[] arr) {
int[] ret = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
ret[i] = arr[i] * 2;
}
return ret;
}
}
//输出
2
4
6
二维数组
二维数组本质上也就是一维数组
,
只不过每个元素又是一个一维数组
基本语法格式
数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };
public class Test {
public static void main(String[] args) {
int[][] arr = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12} };
for (int row = 0; row < arr.length; row++) {
for (int col = 0; col < arr[row].length; col++) {
System.out.printf("%d\t", arr[row][col]);
}
System.out.println("");
}
}
}
//输出
1 2 3 4
5 6 7 8
9 10 11 12