1、基本概念
(1)定义数组
int[] array = {1,2,3,4};
//int array[] = {1,2,3}; 不建议这种写法
int[] array2 = new int[]{1,2,3,4};
int[] array3 = new int[10];
//当数组没有初始化,分配的默认值都是0
(2)初始化
int[] array1;
array1 = new int[10];
int[] arr2;
array2 = new int[]{1,2,3};
(3)访问数组元素
System.out.println(array[0]);
//求数组名的长度
System.out.println(array.length);
(4)数组的遍历
增强遍历
//for-each
for(int x:array){
System.out.print(x);
}
2、引用变量
(1)引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量可以去操作对象。
(2)当一个对象没有被引用指向时,会被系统自动回收
int[] array = null;
//这里的array储存的是数组的地址,称为引用变量
(3)一个引用不能同时指向多个对象
(4)对象不能指向对象,只有引用才能指向对象
(5)null
int[] array = null;
System.out.println(array.length);
//会产生空指针异常
3、数组传参
(1)数组作为参数
public static void main(Sting[] args){
int[] array = {1,2,3,4};
func(array);
}
public static void func(int[] array){
}
例子
public static void main(Sting[] args){
int[] array = {1,2,3,4};
func1(array);
}
public static void func1(int[] array){
array[0] = 99;
}
public static void func1(int[] array){
array = new int[]{11,22,33,44};
}
//用第一个方法后,数组的内容变为{99,2,3,4}
//第二个方法后,数组内容不变
第一个方法修改了共同对象的内容
第二个方法使形参引用指向了一个新的对象,而没有修改原来的对象
(2)数组作为返回值
public static int[] func(){
}
4、数组相关方法
Arrays类中有许多关于数组的方法
(1)打印字符串
import java.util.Arrays;
int[] array = {1,2,3,4,5};
System.out.println(Array.toString(array));
//将数组转换成字符串之后打印
(2)数组排序
import java.util.Arrays;
Arrays.sort(array);
(3)数组比较
System.out.println(Arrays.equals(array1,array2));
(4)数组填充
Arrays.fill(array,9);
//将array数组中全部填充成9
(5)拷贝数组
int[] array2 = Arrays.copyOf(array1,array1.length);
//Arrays.copyof(array1,array1.length*2);
//Arrays.copyof(要拷贝的数组,拷贝的长度)
int[] array3 = Arrays.copyOfRange(array1,0,3);
//拷贝array1,从下标0到下标3,包括0但不包括3
System.out.println(arraycopy(array1,0,array4,0,array1.length));
//
5、二维数组
(1)定义
int[][] array1 = {{1,2,3},{4,5,6}};
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] array3 = new int[2][3];
//Java中定义二维数组时行不能省略
int[][] array4 = int[2][];
//可以省略列数————不规则二维数组
(2)二维数组实际上是一个一维数组
这个意味数组里存的是每一行一维数组中地址的元素
int[][] array = new int[2][3];
System.out.println(array.length);
//打印出是2即行数(二维数组元素的个数是行数)
System.out.println(array[0].length);
//打印出是3即列数
(3)遍历打印二维数组
//转化
System.out.println(Arrays.deepToString(array));
用for-each
for(int[] temp : array){
for(int x : tmp){
System.out.print(x);
}
}