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