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
廣告