網(wǎng)站模板修改器合川網(wǎng)站建設(shè)
一、數(shù)組的兩種初始化方式
1.完整格式(靜態(tài)初始化)
數(shù)據(jù)類(lèi)型[] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[]{元素1,元素2…};
//范例
int[] arr = new int[]{1,2,3,4};
簡(jiǎn)化書(shū)寫(xiě)
一般我們會(huì)省略=后面的 new 數(shù)據(jù)類(lèi)型[]
int[] arr = {1,2,3,4};
2.動(dòng)態(tài)初始化
當(dāng)不知道數(shù)組里面的初始值的時(shí)候,我們就要采用動(dòng)態(tài)初始化
//申請(qǐng)一個(gè)長(zhǎng)度為10的int類(lèi)型的數(shù)組
int[] arr = new int[10];
二、數(shù)組的遍歷方式
通過(guò)索引循環(huán)遍歷
int[] arr = {1,2,3,4};
for(int i = 0; i<arr.length(); i++){System.out.println(arr[i]);
}
當(dāng)然還有別的方法,我們先混個(gè)眼熟
//增強(qiáng)for,對(duì)于數(shù)組來(lái)說(shuō),本質(zhì)與普通for相同
for (int i : arr) {System.out.println(i);
}
//以字符串的形式展示
System.out.println(Arrays.toString(arr));
三、數(shù)組的開(kāi)辟與訪問(wèn)
開(kāi)辟:在堆上開(kāi)辟一塊新空間,將地址返回給數(shù)組名
訪問(wèn):數(shù)組名[索引]
四、數(shù)組的注意事項(xiàng)
1.數(shù)組直接打印打印的是地址值
System.out.println(arr)打印的就是arr的地址值,因?yàn)榈刂芬彩且粋€(gè)數(shù)嘛 printf就是負(fù)責(zé)打印
2.數(shù)組在內(nèi)存圖中的位置
定義數(shù)組是通過(guò)new關(guān)鍵字,new關(guān)鍵字定義的所有對(duì)象都是在堆上開(kāi)辟空間的
?所以下面的結(jié)果是什么 是true還是false
int[] arr1 = {1,2,3}; int[] arr2 = {1,2,3};
arr1 == arr2 // true? or? false ???
比較的是地址值為false
3.數(shù)組一旦開(kāi)辟了空間長(zhǎng)度是不可變的
雖然java弱化了指針與地址的概念,但是C的內(nèi)存機(jī)制是最基礎(chǔ)最底層的原理
4.區(qū)分?jǐn)?shù)組長(zhǎng)度為0 和 數(shù)組 == null的概念
數(shù)組長(zhǎng)度為0 是指定義了一個(gè)長(zhǎng)度為0的數(shù)組
數(shù)組 == null是指數(shù)組的地址為null,也就是空指針
5.理解數(shù)組越界的概念
從內(nèi)存的角度理解數(shù)組越界的概念
五、java內(nèi)存分配
棧:方法運(yùn)行會(huì)加載進(jìn)棧,局部變量會(huì)在棧上開(kāi)辟空間
堆:使用new關(guān)鍵字創(chuàng)建的對(duì)象,都在這開(kāi)辟空間
方法區(qū):存儲(chǔ)class文件
寄存器與本地方法棧:我們暫時(shí)不需要了解
一個(gè)簡(jiǎn)單的java程序,運(yùn)行時(shí)的內(nèi)存圖
①加載class文件
②main方法為主入口,main方法進(jìn)制
③調(diào)用show方法,show方法進(jìn)棧
④show調(diào)用完出棧
④為變量a在棧上開(kāi)辟空間
⑤輸出a
?????
六、總結(jié)
數(shù)組何時(shí)用動(dòng)態(tài)初始化、何時(shí)用靜態(tài)
數(shù)組是在哪里開(kāi)辟空間的
數(shù)組名==數(shù)組名比較的是什么