0

これらのステートメントがある場合:

String S1 = "AAA";
S1 = "aaa";

これは、特定のプロパティに割り当てられた元の値が変更されていないことを意味します(文字列クラスは不変であり、S1はインターンオブジェクトであるため)。

今...次のステートメントがある場合:

String S1 = new String("AAA");
S1="aaa";

これは、文字列クラスの特定のプロパティに割り当てられた元の値が変更されたことを意味します(文字列クラスは不変であり、S1はインターンオブジェクトではないため)

私の理解は正しいですか?

4

3 に答える 3

4

いいえ、Stringオブジェクトはどのような状況でも不変です。これを呼び出すとnew String("foo")、渡されたコンテンツを含む別の文字列が作成されます。だから、これをしないでください。

編集:
2番目のケースS1ではインターンされていませんが、これはその不変性をキャンセルしません。したがって、String割り当ては常に左のオブジェクトを変更せず、参照を書き換えるだけです。

于 2012-11-29T16:33:07.340 に答える
1

文字列は不変です。つまり、String のインスタンスは変更できません。別のまだ不変の String インスタンスを参照する新しい変数を作成しています。

文字列への変更を変更リストの種類のメソッドで元の文字列から分岐させることができます

String s = new String();

空の String オブジェクト ("") が作成されます。そして、変数 s はそのオブジェクトを参照します。

于 2012-11-29T16:33:42.020 に答える
1

他の回答に加えて、

String オブジェクトを受け取る String コンストラクターは設計上の欠陥であり (不変のインスタンスを 2 回作成しても意味がありません)、非推奨です。使用しないでください。

于 2012-11-29T16:37:58.300 に答える