1

Javaで、同じ値を持つ2つの文字列リテラルを作成しました

String a = "Hello";
String b = "Hello";

両方とも同じ参照を持つ必要があります

System.out.println(a==n); // returns true

しかし、私がするとき

b+=" World";
System.out.println(a==b); // returns false

ここで 2 つの質問
があります。2. エラーなしで文字列 b を変更できるのはなぜですか? (文字列クラスは不変であると読んだため)

4

3 に答える 3

4

変更できる理由bは、技術的に新しい String オブジェクトを作成し、それを既存の参照に割り当てるためです。

b += " World"

と同じです

b = b + " World";

b技術的には、新しい String オブジェクトを指しています。したがって、最初は同じオブジェクトを指していますが、変更するaと別のオブジェクトになるため、等しくなく、false になります。bba"Hello World"a==b

変更可能な String クラスの例については、StringBufferまたはを試してくださいStringBuilder。それらのメソッドを使用し.append()て文字列に追加したり、他のメソッドを使用して変更したりできます。

于 2013-08-06T15:54:06.240 に答える
2
  1. 新しい文字列インスタンスを作成しているときb+=" World"、もちろん、これは同じ古い文字列を指していません。

  2. 古い文字列を変更するのではなく、新しい文字列を作成して変数 b に割り当てます。その変数で常に同じオブジェクトを参照する場合は、修飾子を使用finalします。

于 2013-08-06T15:50:48.700 に答える
0
  1. a と b は String オブジェクトを指しています。b を変更するということは、新しいオブジェクトを指していることを意味します。

  2. 文字列は不変であるため、文字列を「変更」すると、新しいオブジェクトが作成されます。そのため、2 番目はもはや同じではありません。

于 2013-08-06T15:52:22.723 に答える