0

Javaの文字列は不変ではないと聞いただけで、文字列以外にも不変のオブジェクトがあるのではないかと思いました。

ちなみに、C ++の文字列も不変ですか?

4

2 に答える 2

3

プリミティブ型の多くは不変です(整数、ロング、ブールなど)。不変性は、Javaで明示的に示されているものではなく、実際にはセマンティックコントラクトです。クラスのメンバーをfinalとして宣言し、構築時にそれらを割り当て、クラスのパブリックインターフェイスを介してアクセスをロックダウンすることにより、クラスを不変にすることができます。

C ++の文字列は、ゼロ文字で終わる文字配列です。それでおしまい。constを使用するとアクセスをロックダウンするのに役立ちますが、これには不変性の約束はありません。

重要なのは、Javaの多くのものは不変であるということですが、これを実際に証明できるのはドキュメントとソースだけです。

于 2013-03-13T01:43:52.580 に答える
1

整数などのボックス化されたプリミティブはすべて不変です。

不変のクラスを自分で作成できます。たとえば、コンストラクターを使用して変数を設定し、パブリック変数やセッターを持たないクラスです。

于 2013-03-13T01:44:09.317 に答える