1.數(shù)組初始化
1.1 靜態(tài)初次化:指定數(shù)組每個(gè)元素的值,由系統(tǒng)決定數(shù)值長(zhǎng)度。
String[] book=new String[]{"java","c++","python"};
1.2動(dòng)態(tài)初始化話:初始化時(shí)指定數(shù)組長(zhǎng)度,系統(tǒng)自動(dòng)分配初始值。
String[] book=new String[10];
2.數(shù)組變量和數(shù)據(jù)對(duì)象的區(qū)別
2.1先思考以下的代碼
person[] per=new person[2];
//賦值
per[0]=new person("小明",12);
per[1]=new person("小紅",22);
person myperson=per[0];
//輸出myperson的值
myperson.toString(); //值是什么?
//改變賦值
per[0].setName("張三");
//輸出myperson的值
myperson.toString(); //值是什么?
兩次輸出是否相等。
接下來(lái)再看一段代碼
//建立一個(gè)int[] 數(shù)組并初始化
int[] array={1,2,3,4,5};
int k=array[2];
int o=30;
array[4]=o;
//輸出
System.out.println("k="+k+" o="+o+" array="+Arrays.toString(array));
//改變賦值
array[2]=20;
System.out.println("k="+k); //K的值是什么 改變了嗎
//改變賦值
o=40;
System.out.println("array[4]="+array[4]); //array[4]是什么 改變了嗎
輸出結(jié)果
name=小明 age=12
name=張三 age=12
k=3 o=30 array=[1, 2, 3, 4, 30]
k=3
array[4]=30
兩段代碼,剛好可以解析數(shù)組變量和數(shù)組對(duì)象的區(qū)別。
- 數(shù)組變量:其實(shí)可以用變量來(lái)理解,例如int i 這個(gè)i就是個(gè)int變量而已。他就像是C語(yǔ)言的指針一樣,當(dāng)作是一個(gè)指針,其他本身并沒(méi)有值。他是一個(gè)指引,指向存儲(chǔ)這個(gè)值的地方的地址。
- 數(shù)據(jù)對(duì)象:相當(dāng)于new 一個(gè)空間。數(shù)據(jù)就是放在這個(gè)內(nèi)存空間里面(堆內(nèi)存)。
但是java程序無(wú)法直接處理這個(gè)內(nèi)存空間。要通過(guò)數(shù)組變量來(lái)調(diào)用這個(gè)空間。 - 這就解析了:
- 為什么per[0]的值改變,myperson的值也改變呢?那是因?yàn)?,myperson跟per[0]所指向的內(nèi)存空間是一樣的,因此內(nèi)存空間的值改變了,他們所顯示的值也都變了。
- 那為什么o的變量改變了,而array[4]的值沒(méi)有變呢?他們內(nèi)存空間不是一樣的嗎?這就涉及到基本變量的問(wèn)題了,在方法聲明的變量屬于局部變量,保存在棧中,而數(shù)據(jù)元素則作為數(shù)據(jù)對(duì)象的一部分,保存在棧之中。所有他們的內(nèi)存空間不一樣。因此在賦值過(guò)程中,只是賦值,并沒(méi)有改變他們的指引噢。
小結(jié)
要理解好數(shù)組變量和數(shù)據(jù)對(duì)象的關(guān)系,聯(lián)系上基本數(shù)據(jù)類型來(lái)理解。