Yes.
The reverse()
method
reverses the order of the characters in a StringBuffer
object.
Unlike the methods of immutable objects,
this method changes the data of its object.
For the following example, pretend that this method does not exist.
Our reverse()
inputs a String
reference
and returns a reference to a reversed version of that String
.
Only two new objects
are created: the StringBuffer
and the
String
object that is returned to the caller.
The append()
method puts a new character at the end
of a StringBuffer
object.
No new object is created.
We can use this method to build up the reversed characters as
the original String
is scanned from right to left:
public class ReverseTester { // create a new string containing the characters of the // input string, but reversed // public static String reverse( String data ) { StringBuffer temp = new StringBuffer(); for ( int j=data.length()-1; j >= 0; j-- ) // scan the String from right to left temp.append( data.charAt(j) ); // append characters on the right return temp.toString(); // return a String created from the StringBuffer } public static void main ( String[] args ) { System.out.println( reverse( "Hello" ) ); } }
This reverse method is much more efficient than the first reverse()
method in this chapter because only one new object is constructed.
Does this program make any assumptions about the size of the
original String
?