Question about string handling

I am trying to do simple string manipulation. the entrance is "murder," I want to get a "murder."

I tried this

String str = "murder";
StringBuffer buf = new StringBuffer(str);
// buf is now "murder", so i append the reverse which is "redrum"
buf.append(buf.reverse());
System.out.println(buf);

but now I get "redrumredrum" instead of "killredrum".

can someone explain what happened to my program? thank.

+3
source share
2 answers

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(); // YES!!!
System.out.println(str); // now "MURDER"!!!

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(); // starts empty

worddrow.append(word).append(word.reverse());

System.out.println(worddrow); // "murderredrum"

, , , , .


! !

StringBuilder sb = new StringBuilder("ha");
sb.append(sb.append(sb));
System.out.println(sb); // "hahahaha"
+13

buf.reverse() , stringbuffer redrum. redrum to redrum

+1

Source: https://habr.com/ru/post/1757492/


All Articles