Почему метод Java concat () ничего не делает? - PullRequest
16 голосов
/ 12 мая 2010

Этот код:

String s = "TEST";
String s2 = s.trim();

s.concat("ING");
System.out.println("S = "+s);
System.out.println("S2 = "+s2);

приводит к выводу:

S = TEST
S2 = TEST
BUILD SUCCESSFUL (total time: 0 seconds)

Почему "ТЕСТ" и "ИНГ" не соединены вместе?

Ответы [ 6 ]

46 голосов
/ 12 мая 2010

строка - неизменна , что означает, что вы не можете изменить строку в Java. concat () возвращает новую объединенную строку.

String s = "TEST";
String s2 = s.trim();
String s3 = s.concat("ING");

System.out.println("S = "+s);
System.out.println("S2 = "+s2);
System.out.println("S3 = "+s3);
9 голосов
/ 12 мая 2010

Поскольку String является неизменным, класс String не содержит методов, которые изменяют содержимое самого объекта String. Метод concat() возвращает новый String, который содержит результат операции. Вместо этого:

s.concat("ING");

Попробуйте это:

s = s.concat("ING");
3 голосов
/ 12 мая 2010

concat возвращает строку, поэтому вы в основном вызываете concat без сохранения того, что он возвращает. Попробуйте это:

String s = "Hello";
String str = s.concat(" World");
System.out.println(s);
System.out.println(str);

Следует напечатать:

Hello
Hello World
3 голосов
/ 12 мая 2010

Я думаю, что вы хотите сделать:

s2 = s.concat("ING");

Функция concat не изменяет строку s, она просто возвращает s с добавленным аргументом.

1 голос
/ 28 мая 2014

.concat() метод возвращает новое объединенное значение. там вы сделали s.concat("ING") -> это возвращает возвращаемое значение «Тестирование». Но вы должны получить его в объявленной переменной.

Если вы сделали s=s.concat("ING");, тогда значение "s" изменится на "TESTING"

0 голосов
/ 18 марта 2014

Поскольку String является неизменным, когда concat () вызывается для любого объекта String как

String s = "abc"; новая строка String obj создается в пуле строк с помощью s

s = s.concat ("def"); здесь создается еще одна строка obj с val abcdef, на которую ссылается s

...