2

次のコードでは、変数 m が 2 回定義されているため、エラーが発生します。

class one {
   public static void main(String args[]) {
     int m=10;
     int m=10;
   }
 }

ただし、宣言がループ内で行われる場合は、mまだ 2 回定義されていても問題ありません。

 class one {
   public static void main(String args[]) {
     for(int i=1;i<=2;i++) {
       int m=10;
     }
   }
 }

コンパイラはエラー メッセージを返しません。
2つの違いを説明できますか?同じメソッド内で同じ変数を2回宣言できる場合とそうでない場合があるのはなぜですか?

4

6 に答える 6

2

最初のケースでは、m はメイン メソッドの最後まで参照されるため、同じスコープに同じ名前の 2 つの変数を含めることはできません。

一方、2 番目のケースでは、ループが実行されるたびに、最後の反復の m が参照されなくなるため、再宣言して再初期化することができます。

于 2012-09-29T17:45:45.383 に答える
0

エラーが発生するのは、同じブロック (スコープ) で同じ変数を 2 回定義したためです。ループ内で実行すると、ループの反復ごとに新しいスコープが「開く」ため、このスコープ内でのみ表示される変数を定義できます (ただし、ループの外ではアクセスできません)。たとえば、次のようなものを書いたとします。

class one {    
    public static void main(String args[]) {     
        {
            int m=10;
        }
        {
            int m=10;
        }
    }
}

同じ名前の変数は同じスコープを共有しないため、問題なくコンパイルされます。

于 2012-09-29T17:45:55.307 に答える
0

-最初のコードでは、同じスコープ内で m を 2 回宣言しており、main() メソッドが終了するまで続きます。

-毎回loop a primitive int variable m値で作成されるため、明らかに問題ではありません。

于 2012-09-29T18:35:29.987 に答える
0

簡単に言えば、2 番目の例では、この変数を 2 回宣言していません。}変数のライフスパンは、それが宣言されたブロックの終了時に終了するためm、2 回目の反復で宣言するまでに、最初の反復は「死んで」います。これが、ループで実行できる理由です。

最初の例では、同じコード ブロック内で同じ名前の 2 つの変数を宣言しています。これらは同時に「生きている」はずです。と書いてもどの変数を参照しているのかわからないため、これは禁止されていますm

于 2014-12-23T15:06:25.593 に答える
0

コード ブロック内で同じ名前の変数を複数回宣言することはできません。

最初のケースでは、コードのブロック、つまりメインで同じ変数を宣言しています。2 番目のケースでは、for ループの最初の反復の後、variable m破棄され、2 番目の反復で再作成されます。

于 2012-09-29T17:47:58.377 に答える
0

変数を2回宣言しているため、最初のエラーが発生しています。

于 2012-09-29T17:55:07.247 に答える