All of the suggested solutions so far have the disadvantage that a data copy must occur. This is the result of failure of abstraction on behalf of java.lang.String - specifically, failure to declare all public methods to an interface. If you assume the interface of java.lang.CharSequence, you can achieve a reverse without ever copying the String data.
Want a hint at implementation?
The source code to net.tmorris.adt.sequence.ReverseSequenceImpl gives some clues.
http://contractualj.com/coverage-report/_files/1f.html