0

私のJavaプログラムでは、1つの最終変数を使用しました.最終変数の値は固定されており、変更できないことがわかっています.では、なぜこの特定のプログラムが正常に機能しているのでしょうか?誰か説明できますか.

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

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

7 に答える 7

3

ループの本体内では最終的なものですが、ループの反復ごとに異なる変数を効果的に宣言しています。

まるであなたがこれを書いたかのようです:

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

繰り返しますが、ループの各反復で呼び出される「新しい」ローカル変数jがあります...しかし、これらの変数のそれぞれがその値を変更することはありません。

于 2013-05-10T11:31:44.717 に答える
1

for ループ jでは として宣言されているためint jです。つまり、iteration ごと新しい jものが作成され、そのスコープは for ループになります。

これで、それぞれjinitialized 1 回だけになり、final キーワードに準拠します。以下のコードはコンパイルエラーを生成します

  for (final int j : integerArray) {
        System.out.println(j);
        j=0; // error, j is getting initialized twice in for-loop context
   }
于 2013-05-10T11:33:33.363 に答える
1

拡張された for ループは次と同等です。

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

ご覧のとおり、ここに矛盾はありません。

于 2013-05-10T11:33:42.643 に答える
1

実際の効果的なコードは次のようなものです:

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

}
于 2013-05-10T11:34:05.020 に答える
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);
 }
于 2013-05-10T11:33:23.647 に答える
0

反復ごとに、新しい最終変数を宣言しています。その変数を変更していないため、正常に機能します。

于 2013-05-10T11:33:39.220 に答える
0

各反復で、新しい変数を宣言します。したがって、これは奇妙な動作ではありません。

于 2013-05-10T11:33:55.740 に答える