2013-05-10 51 views
0

在我的java程序中,我使用了一個final變量。我們知道任何final變量的值是固定的,不能改變。所以這個特定的程序爲什麼工作正常?說明。Java中final變量的奇怪行爲

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

    for (final int j : integerArray) { 
    System.out.println(j); 
    } 
} 

回答

3

這是內最終的循環體 - 但你有效申報的每個循環迭代不同的變量。

這是因爲如果你寫的:

for (int i = 0; i < integerArray.length; i++) { 
    final int j = integerArray[i]; 
    System.out.println(j); 
} 

同樣,我們對循環的每個迭代稱爲j一個「新」的局部變量......但每個那些變量的永遠不會改變它的值。

1

您正在迭代整個數組並打印值,但在迭代過程中並未嘗試更改該final int j

在迭代的每一步都定義了一個新的final int j。您不會覆蓋現有final參考中的值。

做這樣的事情:

for (final int j : integerArray) { 
    j = 5; // this is a direct override, you won't be able to do this. 
    System.out.println(j); 
} 
1

因爲在for循環j被聲明爲int j。對於每個迭代意味着,將創建一個j並且它的範圍是for循環。

現在每個jinitialized只有一次,它堅持final關鍵字。現在下面的代碼生成彙編錯誤

for (final int j : integerArray) { 
     System.out.println(j); 
     j=0; // error, j is getting initialized twice in for-loop context 
    } 
0

對於每次迭代,您聲明一個新的最終變量。它工作正常,因爲你沒有改變這個變量。

1

增強的for循環是相同的:

for (int index = 0; index < integerArray.length; index++) { 
    final int j = integerArray[index]; 
    System.out.println(j); 
} 

正如你可以看到,這裏並沒有矛盾。

0

在每次迭代時,它聲明新變量。所以這不是奇怪的行爲。

1

實際的有效代碼是這樣的:

for (for j=0;j < integerArray.length ; j++) 
{ 
    final int i = integerArray(j); // declaring final i for each iteration 
    System.out.println(i); 

}