Javaにおけるmutableとimmutableの主な違いは、mutableは文字列を変更できることを指し、immutableは文字列の変更が不可能であることを指すことである。
Javaは、デスクトップ、ウェブ、モバイルアプリケーションの開発に役立つ高水準のプログラミング言語です。
一方、文字列とは、文字の集合のことです。
Javaでは、Stringオブジェクトは不変です。
つまり、文字列は変更できないのです。
したがって、プログラマーが一旦Stringオブジェクトを作成すると、そのデータや状態を変更することはできません。
しかし、新しいStringオブジェクトを作成することは可能です。
全体として、mutableは修正できることを指し、immutableは修正や変更が不可能であることを表現しています。
JavaにおけるMutableとは
Mutableとは、文字列を変更したり修正したりできることを指します。
文字列を変更することができない場合でも、文字列を変更する方法はいくつかあります。
この作業をアーカイブする一般的な方法は、StringBufferとStringBuilderを使用することです。
上のプログラムでは、sb1がStringBufferのオブジェクトです。
6行目でオブジェクトを表示し、7行目でsb1に別の文字列を追加しています。
8行目でオブジェクトを表示しています。
最初の文字列が変更されていることがわかります。
このように、StringBufferは文字列を変更することができます。
このように、StringBufferはミュータブルです。
同様に、StringBuilderも与えられた文字列を変更します。
StringBufferはスレッドセーフなので、複数のスレッドが同時にStringにアクセスすることはできません。
一方、StringBuilderはスレッドセーフではありません。
したがって、複数のスレッドが同時にStringにアクセスすることができる。
このため、StringBuilderはStringBufferより高速に動作する。
JavaにおけるImmutableとは
Immutableとは、Stringを変更することができないことを指します。
プログラマーがStringを作成したとき、それを変更することはできない。
以下の例を参照してください。
図2: Stringを用いたJavaプログラム
上のプログラムによると、sは参照変数です。
文字列定数プールにある “Hello “という文字列を参照している。
そして、”Hello “は “World “と結合される。
このとき、最初の “Hello “は変化しない。
代わりに「Hello World」という新しいStringが作成されます。
したがって、7行目には “Hello “とだけ表示されます。
これは、Stringを変更することは不可能であることを示しています。
つまり、文字列は不変なのです。
JavaにおけるMutableとImmutableの違い
定義
Mutableとは文字列を変更できることを指し、Immutableとは文字列を変更できないことを指します。
クラス
StringBuffer と StringBuilder は mutable であるが、String は immutable です。
結論
Stringとは、文字の集合のことです。
Javaでは、Stringはimmutableです。
一方、StringBufferやStringBuilderを用いると、文字列をMutableにすることができます。
Javaにおけるmutableとimmutableの主な違いは、mutableは文字列を変更できること、immutableは文字列を変更できないことを意味することです。