Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中final变量的奇怪行为_Java_Final - Fatal编程技术网

Java中final变量的奇怪行为

Java中final变量的奇怪行为,java,final,Java,Final,在我的java程序中,我使用了一个最终变量。我们知道,任何最终变量的值都是固定的,不能更改。那么,为什么这个特定的程序运行良好?有人能解释一下吗 public static void main(String args[]) { int[] integerArray = { 1, 2, 3, 4, 5 }; for (final int j : integerArray) { System.out.println(j); } } 它是循环体中的最终变量,但实际上

在我的java程序中,我使用了一个最终变量。我们知道,任何最终变量的值都是固定的,不能更改。那么,为什么这个特定的程序运行良好?有人能解释一下吗

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);
}
for(int i=0;i

同样,我们在循环的每次迭代中都有一个名为
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
。这意味着对于每个迭代,将创建一个新的
j
,其范围是for循环

现在,每个
j
只初始化了一次
,它与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(int index=0;index

正如您所看到的,这里没有矛盾。

在每次迭代中它都声明新变量。所以这不是奇怪的行为。

实际有效的代码是这样的:

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

}
for(对于j=0;j