【Java】數組的定義與使用

數組的定義與使用

數組的基本用法

1. 什麼是數組

數組本質上就是讓我們能 “批量” 創建相同類型的變量. 例如:

如果需要表示兩個數據, 那麼直接創建兩個變量即可 int a; int b
如果需要表示五個數據, 那麼可以創建五個變量
int a1; int a2; int a3; int a4; int a5;
但是如果需要表示一萬個數據, 那麼就不能創建一萬個變量了.
這時候就需要使用數組, 幫我們批量創建.

注意事項: 在 Java 中, 數組中包含的變量必須是 相同類型.

2. 創建數組

基本語法

// 動態初始化
數據類型[] 數組名稱 = new 數據類型 [長度] { 初始化數據 };
// 靜態初始化
數據類型[] 數組名稱 = { 初始化數據 };

代碼示例
注意事項: 靜態初始化的時候, 數組元素個數和初始化數據的格式是一致的.

int[] arr = new int[3]{1, 2, 3};
int[] arr = {1, 2, 3};

3.數組的使用

代碼示例

//2.數組的使用:獲取數組長度和訪問數組元素
public class TestArr {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println(arr[0]);//輸出1
        int length = arr.length;//獲取數組長度
        System.out.println(length);//輸出5
    }
}

注意事項:

  1. 使用 arr.length 能夠獲取到數組的長度. . 這個操作爲成員訪問操作符. 後面在面向對象中會經常用到.
  2. 使用 [ ] 按下標取數組元素. 需要注意, 下標從 0 開始計數
  3. 使用 [ ] 操作既能讀取數據, 也能修改數據.
  4. 下標訪問操作不能超出有效範圍 [0, length - 1] , 如果超出有效範圍, 會出現下標越界異常

遍歷數組的兩種方式:
1.for循環遍歷數組
2.for-each遍歷數組(類似與C++中的範圍for)

public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};

        //1.for循環遍歷數組
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
        System.out.println();

        //2.for-each遍歷數組
        for(int e : arr) {
            System.out.print(e);
        }
        System.out.println();
    }

遍歷數組

4.數組作爲方法的參數

用方法打印數組中的內容

 public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        //1.打印數組中的內容,printArray
        printArray(arr);
    }
    
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
        System.out.println();
    }

理解引用的類型(重點)

代碼示例1 參數傳內置類型

public static void main(String[] args) {
        int num = 0;
        func(num);
        System.out.println("num = " + num);
    }
    public static void func(int x) {
        x = 10;
        System.out.println("x = " + x);
    }

執行結果:
數組傳參
我們可以發現改變x的值並未改變num的值,其實這個很好理解,就是num和x指向的是兩個不同的地址空間,二者不相互影響

代碼示例2 參數傳數組類型

public static void main(String[] args) {
        int[] arr = {1,2,3};
        func(arr);
        System.out.println("arr[0] = " + arr[0]);
    }
    public static void func(int[] a) {
        a[0] = 10;
        System.out.println("a[0] = " + a[0]);
    }

數組傳參
我們發現, 在函數內部修改數組內容, 函數外部也發生改變. 此時數組名 arr 是一個 “引用” . 當傳參的時候, 是按照引用傳參.
這裏我們要先從內存開始說起.
如何理解內存?

內存就是指我們熟悉的 “內存”. 內存可以直觀的理解成一個宿舍樓. 有一個長長的大走廊, 上面有很多房間. 每個房間的大小是 1 Byte
(如果計算機有 8G 內存, 則相當於有 80億 個這樣的房間).
每個房間上面又有一個門牌號, 這個門牌號就稱爲 地址

那麼啥又是引用? 什麼是引用?
引用相當於一個 “別名”, 也可以理解成一個指針.
創建一個引用只是相當於創建了一個很小的變量, 這個變量保存了一個整數, 這個整數表示內存中的一個地址. 針對 int[] arr = new int[]{1, 2, 3}
a) 當我們創建 new int[]{1, 2, 3} 的時候, 相當於創建了一塊內存空間保存三個 int

b) 接下來執行 int[] arr = new int[]{1, 2, 3} 相當於又創建了一個 int[] 變量, 這個變量是一個引用類型, 裏 面只保存了一個整數(數組的起始內存地址)

總結: 所謂的 “引用” 本質上只是存了一個地址. Java 將數組設定成引用類型, 這樣的話後續進行數組參數傳參, 其實只 是將數組的地址傳入到函數形參中. 這樣可以避免對整個數組的拷貝(數組可能比較長, 那麼拷貝開銷就會很大).

5.數組作爲方法的返回值

寫一個方法將數組的每個元素*2,但不改變原數組的值

 public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        //寫一個方法將數組中的每個元素乘2,但不改變原數組的值
        String str1 = arr2Str(arr);
        System.out.println(str1);
        int[] newArr = transform(arr);
        String str2 = arr2Str(newArr);
        System.out.println(str2);
    }
    public static int[] transform(int[] arr) {
        int[] newArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i] * 2;
        }
        return newArr;
    }

    //將數組轉換爲字符串
    public static String arr2Str(int[] arr) {
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            str += arr[i];
            if(i == arr.length - 1) {
                str += "]";
            }else {
                str += ", ";
            }
        }
        return str;
    }

執行結果:
數組作爲返回值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章