web-dev-qa-db-ja.com

String.concat()は連結を行いません

文字列をスペースを含むintとcharで連結しようとしていますが、連結されていません。理由は何ですか?

private String messages;
Random r = new Random();
int random = r.nextInt(1000);

char ch='s';
messages.concat(String.valueOf(random));
messages.concat(" ");
messages.concat(String.valueOf(ch));
messages.concat(" ");
7
user2744199

concatは呼び出し文字列を変更しませんが、新しい文字列を返します。

結果の各Stringを次のように結果に割り当てることができます。-

messages = messages.concat(String.valueOf(random));
messages = messages.concat(" ");
messages = messages.concat(String.valueOf(ch));
messages = messages.concat(" ");

または、オーバーロードされた演算子+を使用します

messages = String.valueOf(random) + " " + String.valueOf(ch) + " ";
18
ssantos

Stringsは不変です。他の回答に示されているように、String連結を使用して結果を追加するか、 StringBuilder を使用できます。

StringBuilder messages = new StringBuilder();
messages.append(String.valueOf(random));
messages.append(" ");
messages.append(String.valueOf(ch));
messages.append(" ");

Javaで2つの文字列を連結するにはどうすればよいですか? をご覧ください。


編集:Stringの先頭に挿入する)

messages.insert(0, "newstring");
10
Reimeus

より良い方法は:

Random r = new Random();
    int random = r.nextInt(1000);

StringBuilder str = new StringBuilder(String.valueOf(random));

str.append("s")
str.append(String.valueOf(random))
str.append(" ");
str.append(String.valueOf(ch));
5
messages += String.valueOf(random) + " " + String.valueOf(ch) + " ";
2
Cruncher
char ch='s';
messages =  messages.concat(String.valueOf(random));
messages = messages.concat(" ");
messages = messages.concat(String.valueOf(ch));
messages = messages.concat(" ");

文字列は再割り当てする必要があります。文字列オブジェクトを編集するときは、文字列定数プールに新しい文字列オブジェクトを作成しますが、この新しい文字列値を参照変数に割り当てていないため、変更をに再割り当てする必要があります。それらを作成したのと同じ参照変数

0