Short answer
Line:
buf.append(buf.reverse());
performs essentially the following:
buf.reverse(); // buf is now "redrum"
buf.append(buf);
That is why you get it "redrumredrum".
That is, buf.reverse()does not return a new one StringBuffer, which is the opposite buf. He returns bufafter he completely changed himself!
"" , StringBuffer , :
buf.append(new StringBuffer(str).reverse());
: String StringBuffer
String Java . , StringBuffer ( , , append ).
String String. - ""
String str = "murder";
str.toUpperCase(); // this is "wrong"!!!
System.out.println(str); // still "murder"
:
String str = "murder";
str = str.toUpperCase();
System.out.println(str);
StringBuffer. StringBuffer StringBuffer, , ! StringBuffer. , "", , ( ), , .
void, , return this;, , , - :
sb.append(thisThing).append(thatThing).append(oneMoreForGoodMeasure);
: StringBuffer vs StringBuilder
StringBuffer StringBuilder, , synchronized. StringBuilder.
:
StringBuffer: . [...] JDK 5, , StringBuilder, , , , .
StringBuilder: . [...] StringBuilder . , StringBuffer.
! !
"" , , :
StringBuilder word = new StringBuilder("murder");
StringBuilder worddrow = new StringBuilder();
worddrow.append(word).append(word.reverse());
System.out.println(worddrow);
, , , , .
! !
StringBuilder sb = new StringBuilder("ha");
sb.append(sb.append(sb));
System.out.println(sb);