Sebastian Janisch wrote:This means that for instance Hello becomes
elloh
lloeh
loleh
olleh
and you end up with 4 new String objects on the heap.
Not necessarily. The string exists out of characters, so you can get those into a new char[], then do swaps inside that char[]. In code:
This requires a char[] besides the new String, so if the String contains 1.000.000 characters that means 3.000.000 characters in memory (original String, temporary char[], reversed String). However, if String would have a reverse method then it could skip the temporary char[]; String has a package private method (since at least
Java 1.4) that can be used for this:
(the other String constructors that take a char[] make a copy of that char[])
This means that if String would have a reverse method, it could actually make the temporary char[] part of the reversed String, therefore requiring only 2.000.000 characters in memory. The same code as it would be when part of String:
However, this method does not exist, so using an intermediate StringBuffer or StringBuilder, or code like at the top of my post, is all that remains.