天天看點

Java數組

  數組是一個大容器,能夠容納很多個資料,這些資料都在每一個下标中存放着,是以我們要取數組中的值,需要按下标來取值。

  數組裡的資料它在記憶體裡的記憶體位址編号是連續的,使用C語言檢視記憶體指針可以看得出來:

<a href="https://s2.51cto.com/wyfs02/M00/A7/82/wKioL1nnclmjj5VpAA5vlZoH7-M466.png" target="_blank"></a>

 int類型大小是四個位元組,是以在記憶體位址編号裡下一個位址編号是隔四位。如果是char類型的數組,因為在java裡是兩個位元組,則是隔兩位,其他以此類推。

數組的正确聲明方式:

  int[ ] number;  //聲明一個int類型辨別符為number的空數組

  int number[ ];  //聲明一個int類型辨別符為number的空數組

  int[ ] number=new int[5];  //聲明一個int類型,辨別符為 number,數組長度為5,裡面沒有參數值的數組

  int[ ] number={234,9,54,6,3,72,42,41};   //聲明一個int類型,辨別符為 number,數組長度為8,已初始化參數值的數組

  int[ ] number=new int[]{23,22,55,59,52,6};   //聲明一個int類型,辨別符為 number,數組長度為6,已初始化參數值的數組

  int i=10;

  int[ ] arr=new int[i];  //聲明一個int類型,辨別符為 arr,用變量i的值來定義數組長度

要注意的是:

  1.數組長度一旦定義,就不能再進行擴充

  2.數組裡的數組類型是一緻的,例如說一個int 類型數組裡面不會出現short類型或其他資料類型

  3.數組的下标永遠都是從0開始的

如何得知數組的長度:

   想要得知數組的長度就要用length通路。例如:

<a href="https://s4.51cto.com/wyfs02/M02/08/D2/wKiom1nndRaAD3ODAA1yctfTzVM917.png" target="_blank"></a>

輸出結果:第一個數組長度是9;第二個數組長度是5。

數組的下标從0開始的原因:

  數組的下标都是從0開始的,因為數組的記憶體配置設定的記憶體位址編号是連續的,數組辨別符指向的是第一個記憶體位址編号。是以隻有下标從0開始才能更好的計算。例如:

<a href="https://s3.51cto.com/wyfs02/M01/A7/82/wKioL1nncmbRMRkyAAjyBNbNKK4921.png" target="_blank"></a>

  這是int類型的數組,裡面每個數值的存儲空間都是四個位元組,并且位址編号是連續的,是以可以用圖中的方法計算。如果數組下标從1開始的話,第一個計算位址編号的方法就變成10001+(4個位元組*1)=10005了,要再-4才能得出10001,無疑是多了一步計算。從0開始則它的位址編号還是10001不會變動,然後其他的數值再按照各自的下标數字進行計算得出記憶體位址編号。

周遊數組的方式:

  周遊數組能用循環周遊出來,一般常用for循環和for each循環,for each是jdk1.5以上版本才支援的寫法,是for循環的簡寫方式,主要是能加快編寫效率,在運作時它還是會安照for循環的機制去走的。

代碼如下:

<a href="https://s5.51cto.com/wyfs02/M00/08/D2/wKiom1nndSLQlX5PAAwrwL54M9Y305.png" target="_blank"></a>

 把arr1的值交給i,然後一個個列印出來完成數組的周遊,缺點就是較為不靈活,适合用于單純的周遊。

  for循環比較與for each寫法靈活,可以在裡面進行一些改變,但是寫法就較為複雜些。例如:

<a href="https://s5.51cto.com/wyfs02/M02/A7/82/wKioL1nncnDA2LB0AAdZCeper7g000.png" target="_blank"></a>

是以for each是for的簡寫方式,在周遊數組上,它們實作的功能是一樣的。

其他的類型的數組聲明時在循環裡要寫對應的資料類型。

例如:

double[ ] d={34,23,423,4,234,2,5};

for(double f:d){    //這裡要寫和數組類型對應的資料類型

   System.out.println(f);

}

錯誤示例:

for(float f:d){    //這樣的寫法則是錯誤的,因為不是數組對應的資料類型

本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1973987,如需轉載請自行聯系原作者