1. 程式人生 > >JAVA 基本型別陣列的初始化(原理篇)

JAVA 基本型別陣列的初始化(原理篇)

本頁面更新日期: 2016年06月25日

前言

在之前的學習中, 我們已經會 初始化陣列了. 但是你真的瞭解其內部都發生了什麼嘛? 下面讓我們探究一下. 扒光陣列的華麗外衣, 嘿嘿.

對於 基本型別陣列而言, 陣列元素的值 是直接儲存在 對應的陣列元素中.
因此, 初始化陣列時, 先為該陣列分配記憶體空間, 然後直接將陣列元素的值 存入對應的陣列元素中去.

這裡寫圖片描述

看上圖, 其中 1,2,3,4,5 是陣列元素的值.
1,2,3,4,5 外面的長方形外框, 就是陣列元素.
根據這個圖, 我們可以推斷出, 這是一個 int[] 陣列, 它的長度是5, 就是說具有5個數組元素, 而這5個數組元素裡面存放的值 分別是 1,2,3,4,5

下面讓我們寫份程式碼試試, 定義一個 int[]型別的陣列變數, 採用動態初始化的方式, 然後顯式的為每個陣列元素賦值. 最後將陣列 輸出出來.

public class PrimitiveArrayTest
{
  public static void main(String[] args)
  {
    //定義一個 int[] 型別的陣列變數
    int[] iArr;
    //動態初始化陣列, 陣列長度為5
    iArr = new int[5];
    //採用迴圈方式為每個陣列元素賦值
    for (int i = 0; i < iArr.length; i++)
    {
      iArr[i] = i + 10
; } //使用 foreach 迴圈輸出陣列 for (int temp : iArr) { System.out.println(temp); } } }

自己寫然後執行看下, 接著我們來說道說道, 這裡面到底發生了什麼.

執行第一行程式碼 int[] iArr; 時
僅僅是定義了一個數組變數, 此時的記憶體如下圖:

這裡寫圖片描述

上圖可以看出, 執行了 int[] iArr 程式碼後.
僅在 棧記憶體 中定義了一個空引用(就是 iArr陣列變數)
這個引用並未指向任何有效的記憶體.

當執行 iArr = new int[5] 動態初始化後, 系統就開始搞事了. 會為其分配記憶體空間, 並分配預設的初始值: 所有陣列元素都被賦值為 0 .
此時記憶體情況如下:

這裡寫圖片描述

此時 iArr 陣列的每個陣列元素的值 都是 0
當迴圈為該陣列的每個 陣列元素 賦值後
此時每個陣列元素的值 都變成程式顯式指定的值.
那麼如下圖:

這裡寫圖片描述

從上圖中可以看出, 基本型別陣列的儲存示意圖.
每個陣列元素的值 都是直接儲存在對應的記憶體中.

結尾

如果你想學習更多JAVA知識, 可以 點我進入目錄頁