Объект String неизменен.
String str = "ObjectOne"+"ObjectTwo";
is same as
String str = "ObjectOneObjectTwo";
Под неизменным мы подразумеваем, что значение, хранящееся в объекте String, не может быть изменено. Тогда следующий вопрос, который приходит нам на ум: «Если String неизменен, то как я могу изменить содержимое объекта, когда захочу?». Ну, точнее, это не тот же объект String, который отражает изменения, которые вы делаете. Внутри создается новый объект String для внесения изменений.
Так предположим, что вы объявляете объект строки:
String myString = "Hello";
Далее вы хотите добавить «гость» в той же строке. Чем ты занимаешься?
myString = myString + " Guest";
Когда вы печатаете содержимое myString, выход будет «Hello Guest». Хотя мы использовали один и тот же объект (myString), внутри процесса был создан новый объект. Так что мистик будет ссылаться на «Привет Гость». Ссылка на привет проиграна.
String s1 = "hello"; //case 1
String s2 = "hello"; //case 2
В случае 1 буквально s1 создается вновь и хранится в бассейне. Но в случае 2, буква s2 ссылается на s1, вместо этого он не будет создавать новый.
if (s1 == s2) System.out.println ("equal"); // печать равна
String s= "abc"; //initaly s refers to abc
String s2 =s; //s2 also refers to abc
s=s.concat("def"); // s refers to abcdef. s no longer refers to abc.
был аналогичный вопрос здесь: http://stackoverflow.com/questions/15669067/fastest-way-of-converting-integer-to-string-in-java – msi