1

誰かが次のシナリオを説明できますか?

String s = "Testing";
s.concat("Java 1");
System.out.println(s);
s = s.concat(" Java 2");
System.out.println(s);

上記の出力は次のとおりです。

Testing
Testing Java 2
4

5 に答える 5

7

これは、JavaStringオブジェクトではimmutable(オブジェクトに格納されている値を変更できない) ためです。concatまたはなどの操作を実行replaceすると、結果を保持するために内部的に新しいオブジェクトが作成されます。

于 2013-05-02T08:42:09.060 に答える
3

あなたが言ったとき

String s = "Testing";
s.concat("Java 1"); // this returns a new String which is "TestingJava 1"
System.out.println(s);

このconcatメソッドは、プログラムによって保存されなかったnewを生成しました。 Stringnew を返す理由は、java のクラスの不変の動作をString示しています。String

変更可能な文字列操作の場合、StringBuilderまたはを使用できますStringBuffer

于 2013-05-02T08:46:13.190 に答える
1

String.concat は、無視した連結文字列を返します。これを試してください

String s = "Testing";
s = s.concat("Java 1");
于 2013-05-02T08:43:56.537 に答える
1

ドキュメントを読む:

引数文字列の長さが 0 の場合、この String オブジェクトが返されます。それ以外の場合は、この String オブジェクトによって表される文字シーケンスと引数 string によって表される文字シーケンスを連結した文字シーケンスを表す、新しい String オブジェクトが作成されます。

あなたs.concat("Java 1"); の新しいstring

于 2013-05-02T08:47:31.727 に答える