- 同C语言,Java数组属于引用类型,但是数组的元素可以是引类型也可以是基本(值)类型。
- 数组在内存中的存储是连续的。
-
1. 一维数组
1.1 声明和初始化
首先,因为数组是引用类型,所以数组的初始化都要使用关键词 new。数组的初始化分为两种,静态初始化和动态初始化。
【静态初始化】数组的初始化和数组元素的赋值操作同时进行。class test {
public static void main(String[] args){
// 1. 静态初始化
int[] ids1 ; //声明
ids1 = new int[]{1,2,3}; // 初始化
int[] ids2 = new int[]{1,2,3}; // 声明与初始化同时进行
}
}
【动态初始化】数组初始化时先确定长度,但是不赋值。
class test { public static void main(String[] args){ // 2. 动态初始化 int[] ids1 = new int[5]; String[] name = new String[10]; } }
1.2 获取数组长度
使用数组的 length 属性。
class test { public static void main(String[] args){ // 动态初始化 String[] name = new String[10]; System.out.println(name.length); } }
1.3 内存分布
数组是引用类型,内存分布在 堆 里。详细来说,数组的声明在栈中进行,栈中一个单元指向该数组在堆中的地址,而数组的内容(new出来的东西)在堆中动态存储,其分布如下图所示:
1.4 默认初始值
整形:0 (byte、short、int、long)
- 浮点型:0.0 (float、double)
- char型:’\0’ 空字符
- boolean型:false
- 引用类型:null (包括String)
2. 二维数组
2.1 声明与初始化
【静态初始化】
class test {
public static void main(String[] args){
// 静态初始化
String[][] names = new String[][] {{"zhangsan","lisi"},{"wangwu"},{}};
System.out.println(names.length); // 输出3
// 二维数组的长度就是第一维的长度
}
}
【动态初始化】
class test {
public static void main(String[] args){
// 动态初始化1
String[][] names1 = new String[4][3] ;
// 动态初始化2
String[][] names2 = new String[4][] ;
}
}
动态初始化时,行长度不可省略,列长度可以省略。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2643809/1626254484834-d13a6749-4056-48bd-bc2f-4794424a9f55.png#clientId=ua9f47d39-a1dd-4&from=paste&height=198&id=u61484794&margin=%5Bobject%20Object%5D&name=image.png&originHeight=182&originWidth=515&originalType=binary&ratio=1&size=14769&status=done&style=none&taskId=ue2784275-8fe2-472c-a649-ee029b7711f&width=559)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2643809/1626254498422-c4f370ca-2ae0-4303-a87b-479299d92306.png#clientId=ua9f47d39-a1dd-4&from=paste&height=185&id=u3291ee3d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=185&originWidth=652&originalType=binary&ratio=1&size=17296&status=done&style=none&taskId=u653f443e-25f5-48a7-8337-4bf4879250a&width=652)<br />二维数组的元素调用和C语言的方法一致。<br />当然,也可以单行初始化:
2.2 默认初始值
2.2.1 内层元素
内层元素的默认初始值与一维数组完全一致,但是要注意的是,调用二维数组内层元素的时,其第二维长度必须已经声明,否则运行时会报空指针的错误:
2.2.2 外层元素
每一个外层元素相当于一个一维数组,因此外层元素的初始值就是其一维数组的地址。当第二维长度未设置时,每一行都是一个空指针,所以此时外层元素初值都是 null:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2643809/1626255678110-5cc68787-317f-436e-9979-f74a2b2a1d1c.png#clientId=ua9f47d39-a1dd-4&from=paste&height=210&id=u51461649&margin=%5Bobject%20Object%5D&name=image.png&originHeight=210&originWidth=827&originalType=binary&ratio=1&size=29241&status=done&style=none&taskId=udf342056-8f03-4a77-84f9-d7b4dbae5f9&width=827)<br />反之,其初值就是每一行的首址: