2016-05-31 4 views
1

インラインで作成され、メソッドに渡されるオブジェクトの有効期間はどのくらいですか?たとえば :Javaのインラインオブジェクトがパラメータの有効期間として渡される

myMethod(new String("Hello World")); 

文字列の「Hello World」を作成し、破壊されただけでMyMethodは実行後またはガベージコレクタはそれを削除するまで、それはまだ記憶に残っていますか?

答えて

6

JAVAは文字列リテラルを異なる方法で処理します。ここで値 "Hello World"を持つStringオブジェクトはに作成されます。String定数プール

定数プール内のこのリテラルの存続期間は、JVMによって決定されます。これは、JVMがいつガーベージ用に収集するかを決定することを意味します(Constantプールにメモリがなくなり、 )。

ただし、メソッドの実行直後に破棄されることはありません。あなたはグローバル変数に代入しない限り、http://www.thejavageek.com/2013/06/19/the-string-constant-pool/

+0

ありがとう! したがって、別のメソッドからStringオブジェクトを取得した場合、それはString Constant Poolによって管理されますか?例: myMethod(getKey()); "getKey()"は、キー/パスワードの文字列表現を返すメソッドです。 – darkalbo

+0

JAVA Stringリテラルは ""を使用して作成され、Stringオブジェクトはnewキーワードを使用して作成されます。リテラルはString Constant Poolに保持され、Stringオブジェクトに対しては1つのリテラルがConstantプールに作成され、1つはヒープに作成され、オブジェクト参照はヒープにあるオブジェクトを指します。 –

0

イムはかなり確信して、それが唯一の方法に存在しています:

あなたはここに文字列定数プールの詳細を見つけることができます。

関連する問題