AHHH
Строки являются неизменяемыми, поэтому каждый раз, когда вы делаете z + x, вы фактически создаете экземпляр целого нового объекта, содержащего конкатенацию первых двух.
StringBuffers являются изменяемыми, что означает, что они могут быть изменены без создания новых экземпляров. Это позволяет создать один строковый буфер и добавить к нему дополнительные строковые значения при необходимости.
StringBuffer a = new StringBuffer("a");
a.append("b").append("c");
a.append("d");
приведет к "abcd" при вызове a.toString ().