数组可存储多个类型一致的元素
引用类型和基本数据类型的区别
基本数据类型创建时,变量就在栈区和常量区占据了位置(如果常量已有,则使用栈存常量地址来引用)
而引用数据类型呢(数组也是引用数据类型),声明时只在栈开辟地址(根据操作系统,32位的内存地址是4字节,64位是8字节),初始化赋值后在堆或方法区赋值
new出来的对象放在堆里,程序运行的常量放在方法区里
所有局部变量都存放在栈里面
数组初始化
声明 类型[] 数组名 或 类型 数组名[]
数组没有初始化是无法使用的,初始化一般是直接赋值,如果开始声明又不明确内容,可以先赋值null
如赋值初始化必须给出数组的长度
int[] shuzu = new int[3]; 指定长度3 (此式和第二个式子new不能省略)
int[] shuzu = new int[]{1,2,3}; 长度默认跟大括号元素个数决定
int[] shuzu = {1,2,3}; 此式为上式的简化。即数组默认长度是3
当我们使用第一种方式初始化数组时,int对应元素是0,float是0.0,boolean是false,引用类型是null
访问数组元素
数组名[索引] 索引值0到数组长度-1 (和python不一样,不支持负索引)
数组的长度 数组名.length (和字符串不一样,没有括号) 数组为null时无法访问
数组赋值,如果是数组整个赋值给另一个数组,其赋值的效果是将栈地址内容的引用复制给另一个,导致他们内容使用同一个区域,修改一个,另一个跟着变化 ,如下图,修改a[0],b[0]也跟着变

数组相关类java.util.Arrays里面有很多关于数组的函数
举几个例子,Array.fill(a,100);将int数组a的每个元素填充为100
常见数组遍历
for(int i=0;i<a.length;i++){ } 按索引遍历
for(int i:a){ } 按元素遍历
定义二维数组
声明
数据类型[][] 数组名 或 数据类型 数组名[][]
初始化
数据类型[][] 数组名 = new 数据类型[m][n] 定义m行n列数组,也可以理解为建立数组m个元素,每个元素又是n个元素的数组
数组各行允许长度不一样,如int[][] array={{1,2},{2,3,4},{3,4}}; 1,2,3行长度分别为2,3,2
初始化只给行维度,列维度为空,这是一维数组每个元素是null,可以在稍后赋值
数据类型[][] 数组名= new 数据类型[m][ ]
需要注意的是如果你这么定义了,int[][] arr = new int[10][];
arr[0] = {1,2,3};赋值会报错
而arr[0]=new int[3];和arr[0]=new int[]{1,2,3}不会报错
遍历二维数组
方法1,按索引
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
方法2,按元素
for(int[] i:arr){
for(int j:i){
System.out.println(arr[i][j]);
}
}