前言
????????數組是多個相同類型按一定順序排列的集合,并使用一個名字來命名,并通過編號的方式對這些數據進行統一管理
常見概念:數組名,下標(索引), 元素 ,? 數組長度
概述
1. 數組本身是引用數據類型,而數組中的元素可以是任意數據類型,包括基本數據類型和引用數據類型。
2. 創建數組對象會在內存中開辟一整塊連續的空間,而數組名中引用的是這塊連續空間的首地址
3. 數組的長度一旦確定,便不能修改
4. 可以通過下標(索引)來查找指定位置的元素
數組的分類
按照維度:一維數組,二維數組,三維數組。。。。
按照元素的類型:基本數據類型數組,引用數據類型元素的數組(即對象數組)
一維數組
正確的初始化:
int[] array; // 聲明
array=new int[]{1,2,3,4,5}; // 靜態初始化,即初始化和賦值同時進行
String[] str=new String[5]; // 動態初始化,即初始化和賦值過程分開進行
錯誤的寫法:
int[] a=new int[5]{1,2,3,4,5};
int[] b=new int[];
int[5] c=new int[5];
數組的動態賦值
String str = new STring[5]; // 初始化一個數組
// 給數組賦值,數組下標是從0開始
str[0]="張三";
str[1]="里斯"
。。。。。// 長度不能超過數組定義的長度,eg:本例中數組長度為5,所以最大數組下標為4.
獲取數組長度
【數組名】.length
數組的默認初始化值
整型:0
浮點型:0.0
char型:0 (注意此處零是這樣的? ‘0’? 它不等于0,是個字符型)
Boolean型:false
引用數據類型: null
二維數組
對于二維數組,可以看作是一維數組array1又增加了一個一維數組array2的元素而存在,從數組底層的運行機制來看,并沒有多維數組
初始化
正確寫法:
int[][] array=new int[][]{{1,2,3},{1,2},{1}}; // 靜態初始化
int[][] a=new int[3][3];
int[][] b=new int[3][];
int[] c[]=new int[][]{{1,2,3},{1,2},{1}};
錯誤寫法
int[][] a=new int[][3];
int[][] b=new int[][];
int[][] c=new int[3][3]{{1,2,3},{1,2,3},{1,2,3}};
長度
【數組名】.length? 獲取的行有多少行。要想獲取每一行有多少個元素則可以用? 【數組名】[行下標].length
默認值
int[][] a=new int[3][3];
System.out.printf(a[0])? // 此項輸出的是地址值? 棧(地址值)與堆(對象)
System.out.printf(a[0][0]) // 輸出0
特殊的:
int[][] a=new [3][];
System.out.printf(a[1]) // 輸出為null
System.out.printf(a[1][0]) // 報錯,空指針異常
解釋上述第一個輸出為什么是null?
因為沒有定義內層元素的長度,存放在堆中的只有3個空的一維數組,而數組屬于引用數據類型,所以為null