在我的java程序中,我使用了一个最终变量。我们知道任何最终变量的值是固定的,不能更改。那么为什么这个特定的程序工作正常?任何人都可以解释。
public static void main(String args[])
{
int[] integerArray = { 1, 2, 3, 4, 5 };
for (final int j : integerArray) {
System.out.println(j);
}
}
答案 0 :(得分:3)
它是循环体内的最终 - 但是你有效地为循环的每次迭代声明了一个不同的变量。
就像你写的那样:
for (int i = 0; i < integerArray.length; i++) {
final int j = integerArray[i];
System.out.println(j);
}
同样,我们在循环的每次迭代中都有一个名为j
的“新”局部变量......但是每个变量都不会改变它的值。
答案 1 :(得分: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);
}
答案 2 :(得分:1)
因为 for-loop j
被声明为int j
。对于每次迭代,这意味着将创建新 j
,并且范围是for循环。
现在每个j
只有initialized
一次,这符合最终关键字。现在,下面的代码生成编译错误
for (final int j : integerArray) {
System.out.println(j);
j=0; // error, j is getting initialized twice in for-loop context
}
答案 3 :(得分:1)
你的增强版for循环等同于:
for (int index = 0; index < integerArray.length; index++) {
final int j = integerArray[index];
System.out.println(j);
}
正如你所看到的,这里没有矛盾。
答案 4 :(得分:1)
实际有效的代码是这样的:
for (for j=0;j < integerArray.length ; j++ )
{
final int i = integerArray(j); // declaring final i for each iteration
System.out.println(i);
}
答案 5 :(得分:0)
对于每次迭代,您将声明一个新的最终变量。它工作正常,因为你没有改变那个变量。
答案 6 :(得分:0)
在每次迭代时,它声明新变量。所以这并不奇怪。