1. ホーム
  2. java

[解決済み】Javaや.NETで文字列がmutableにならないのはなぜ?

2022-04-17 21:54:18

質問

を作ることになったのはなぜか? String Javaと.NET(と他のいくつかの言語)では不変なのですか?なぜミュータブルにしなかったのでしょうか?

どうすれば解決するの?

によると 効果的なJava の第4章73ページ、第2版。

<ブロッククオート

これには多くの理由があります。不変のクラスは、より簡単です。 設計、実装、そして使用は、ミュータブルクラスより優れています。また を、より安全なものにすることができます。

[...]

" 不変のオブジェクトはシンプルです。 イミュータブルオブジェクトは、以下の状態になることができます。 の状態、つまり作成時の状態です。もし、あなたが すべてのコンストラクタがクラス不変量を確立していれば、そのクラスは これらの不変量は常に真であり続けることが保証されています。 ということです。

[...]

不変オブジェクトは本質的にスレッドセーフであり、同期を必要としません。 複数のスレッドによって破壊されることはありません。 が同時にアクセスします。これは最も簡単な方法です。 スレッドセーフを実現するために 実際、どのスレッドも は、他のスレッドがイミュータブルオブジェクトに及ぼす影響を考慮する必要があります。したがって 不変のオブジェクトは、自由に共有することができます。

[...]

その他、同章の小ネタ。

イミュータブルなオブジェクトを共有できるだけでなく、その内部を共有することも可能です。

[...]

イミュータブルオブジェクトは、ミュータブルまたはイミュータブルにかかわらず、他のオブジェクトのための優れたビルディングブロックになります。

[...]

イミュータブルクラスの唯一の欠点は、異なる値ごとに個別のオブジェクトが必要になることです。