Obiekt typu String jest niezmienny.
String str = "ObjectOne"+"ObjectTwo";
is same as
String str = "ObjectOneObjectTwo";
Przez niezmienny rozumiemy, że wartości zapisanej w obiekcie String nie można zmienić. Następne pytanie, które przychodzi nam na myśl, brzmi: "Jeśli String jest niezmienny, to w jaki sposób mogę zmienić zawartość obiektu, kiedy tylko chcę?". Cóż, to dokładnie to nie jest ten sam obiekt String, który odzwierciedla zmiany, które robisz. Wewnętrznie tworzony jest nowy obiekt String w celu dokonania zmian.
Więc załóżmy zadeklarować obiekt String:
String myString = "Hello";
Następny, który chcesz dołączyć „guest” do tego samego łańcucha. Co robisz?
Podczas drukowania zawartości myString na wyjściu pojawi się "Witaj gościu". Mimo że korzystaliśmy z tego samego obiektu (myString), wewnętrznie powstał nowy obiekt w procesie. Tak więc mystring będzie odnosić się do "Hello Guest". Odniesienie do cześć jest utracone.
String s1 = "hello"; //case 1
String s2 = "hello"; //case 2
W przypadku 1 literał s1 jest tworzony nowo i przechowywany w puli. Ale w przypadku 2, dosłowny s2 odwołuje się do s1, zamiast tego nie utworzy nowego.
jeśli (s1 == s2) System.out.println ("równy"); // Prints równać
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.
było podobne pytanie tutaj: http://stackoverflow.com/questions/15669067/fastest-way-of-converting-integer-to-string-in-java – msi