Stringは参照型ではないとされてると思う。Stringはimmutableなためである。
これによって何が起こるかといえば、Stringの参照渡し(いろいろあるらしいが割愛)が実質的には値渡しとなんらわからないということが起こる。
ではこの時、Stringで参照渡しをしたい場合があるとどうすればよいかということになる。

StringBuffer, StringBuilderはmutableである。つまりこれによって参照側から変更すると、相手側も変化する。
よって、これを利用すれば良い。

Stringを使わず、StringBufferに置き換えて、あとはごにょっとすれば良い。(Stringを要求するところでは、toStringとか)

今まで、StringBuffer, StringBuilderの存在価値がわからなかったが、こういう使い方があるのは興味深かった。
Javaの奥深い部分を若干だけ垣間見れたかもしれないと思った。