5
Javaで文字列をコピーするにはどうすればよいですか?
String s = "hello"; String backup_of_s = s; s = "bye"; この時点では、バックアップ変数にはまだ元の値「hello」が含まれています(これは、Stringの不変性が原因ですか?)。 しかし、このメソッドを使用して文字列をコピーするのは本当に安全ですか(もちろん、通常の可変オブジェクトをコピーするのは安全ではありません)、またはこれを書く方が良いですか?: String s = "hello"; String backup_of_s = new String(s); s = "bye"; 言い換えれば、これらの2つのスニペットの違い(ある場合)は何ですか? 編集-最初のスニペットが安全である理由: すでに提供されている適切な回答(基本的には2つのスニペット間のパフォーマンスの違いの問題に焦点が当てられていました)に基づいて、もう少し詳しく説明します。 文字列はJavaでは不変です。つまり、文字列オブジェクトは作成後に変更できません。したがって、 String s = "hello";新しいStringインスタンスを作成し、そのアドレスをs(sインスタンス/オブジェクトへの参照として)割り当てます String backup_of_s = s;新しい変数backup_of_sを作成し、初期化して、現在参照されているオブジェクトを参照するようにしますsます。 注:文字列の不変性は、このオブジェクトが変更されないことを保証します。バックアップは安全です 注2:Javaガベージコレクションメカニズムは、このオブジェクトが少なくとも1つの変数(backup_of_sこの場合) 最後に、s = "bye";別のStringインスタンスを作成し(不変性のため、これが唯一の方法です)、s新しいオブジェクトを参照するように変数を変更します。
198
java