2011-08-16 4 views
6
Line 1: String x = "Java"; 
Line 2: x.concat(" Rules!"); 
Line 3: System.out.println("x = " + x); 

出力オブジェクトの "x = Javaの"何LOST Stringに起こることは

1行目です:、新しいStringオブジェクトを作成し、 "Javaの" 価値を与え、それにXを参照してください。

行2:VMは値 "Java Rules!"で2番目のStringオブジェクトを作成します。何も言及していない。 2番目のストリングオブジェクトは即座に失われます。あなたはそれに遭遇することはできません。

これらの文字列オブジェクトはヒープで作成されるため、2番目のオブジェクトはガベージコレクションされますか。

+0

'" x = "+ x'は3番目の文字列を作成することに注意してください。 – Thilo

答えて

5

絶対に。それがガベージコレクションのポイントです。 2番目の行のために

x = x.concat(" Rules"); 

を割り当てる必要がありますし、それが動作するように、Java文字列で

7

Enoshは、不変です。

2番目のオブジェクトは、もはやそれを参照するエンティティが存在しないためGCされます。

+2

問題は何かを作ることではありませんでした.Enoshは結果がどうなるかを知りたがっています。コンカット操作の文字列。作成され、どこかに格納されているかどうか。 –

+0

はい、私は知っていますが、私はむしろエラーを修正したいので、この質問を見ている人は間違ってはいけません。 – Dorpsidioot

0

ガベージコレクションされた他のすべてに同意します。しかし、私は、コンカットメソッドはメソッドのローカルフィールドにしか影響を及ぼさないので、コンパイラはコンパイル時にこれをすべて取り除くことができると思います。そのため、ステートメント全体が意味をなさないことになります。

関連する問題