Java中可以為final陣列賦值嗎?


陣列是一種可以容納固定數量項的容器,這些項必須是相同型別。大多數資料結構都利用陣列來實現其演算法。以下是理解陣列概念的一些重要術語。

  • 元素 − 儲存在陣列中的每一項都稱為元素。

  • 索引 − 陣列中每個元素的位置都有一個數字索引,用於標識該元素。

陣列的大小在建立時確定。

示例

 線上演示

public class ArrayExample {
   public static void main(String args[]){
      //Declaring an array
      int[] myArray = {233, 783, 453};
      //Printing the array
      for(int i=0; i<myArray.length; i++){
         System.out.println(myArray[i]);
      }
   }
}

輸出

233
783
453

final變數

如果聲明瞭一個final變數,之後就不能修改或賦值。此外,與例項變數一樣,final變數不會用預設值初始化。

因此,必須在宣告final變數時對其進行初始化。

但是,如果嘗試在未初始化的情況下宣告final變數,則會生成一個編譯錯誤,提示“變數 variable_name 在預設建構函式中未初始化”

示例

public class FinalVariables {
   public static void main(String args[]){
      final int j = 10;
      j = 220;
   }
}

final陣列

但是對於陣列,您可以宣告陣列為final,並且仍然可以重新賦值而不會出現任何編譯時錯誤。

示例

 線上演示

public class FinalArrays {
   public static void main(String args[]){
      //Declaring an array
      final int[] myArray = {233, 783, 453};
      //Printing the array
      for(int i=0; i<myArray.length; i++){
         System.out.println(myArray[i]);
      }
      //Changing the values of the array
      myArray[0] = 2020;
      myArray[1] = 3040;
      myArray[2] = 4060;
      for(int i=0; i<myArray.length; i++){
         System.out.println(myArray[i]);
      }
   }
}

輸出

233
783
453
2020
3040
4060

原因是,與變數不同,陣列是物件,它們不儲存值,而是指向儲存值的記憶體位置的地址。

對於物件和陣列,如果引用變數是final,則它不能指向另一個物件/陣列。如果嘗試這樣做,則會生成編譯時錯誤。

示例

 線上演示

public class FinalArrays {
   public static void main(String args[]){
      //Declaring an array
      final int[] myArray1 = {233, 783, 453};
      //Printing the array
      System.out.println(myArray1);
      int[] myArray2 = {233, 783, 453};
      myArray2[0] = 2020;
      myArray2[1] = 3040;
      myArray2[2] = 4060;
      myArray1 = myArray2;
   }
}

輸出

編譯時錯誤

inalArrays.java:14: error: cannot assign a value to final variable myArray1
   myArray1 = myArray2;
   ^
1 error

更新於:2019年9月6日

408 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告