2016-03-30 20 views
0

の範囲:私はこのコードを持っているこの変数

public Thread createThread(){ 
    final int innerVar = 100; //this Life cycle ? 
    return new Thread(){ 
      public void run(){ 
      System.out.println(innerVar); 
      } 
    }; 
} 

を、私はinnerVarのライフサイクルが何であるかを知りたいですか?

ローカル変数innerVarはまだスタック内かヒープ内のどちらにあるのでしょうか?

答えて

3

innerVarは定数intであるため、コンパイラは定数伝播を実行できます。ライフサイクルはありません。変数の代わりにvalueが使用されているためです。

+0

Javaは内部でどのように処理しますか?私たちが知っているように、最終変数は一度だけ初期化できます。しかし、私がそのメソッドを2回呼び出すと、2回初期化されます。 – Rehman

+1

@Rehmanこれは変数ではなく、コンパイラはすべての 'innerVar'を' 100'で自由に置き換えることができます。したがって、実行時に、[*スプーンはありません](http://c2.com/cgi/wiki?ThereIsNoSpoon)。 –

+0

ありがとうございます。とった :) – Rehman

関連する問題