StringBuilder is not thread safe. So, it performs better in situations where thread safety is not required.
StringBuffer is implemented by using synchronized keyword on all methods.
StringBuffer
/* */ public synchronized StringBuffer append(String string) /* */ { /* 197 */ if (string == null) string = String.valueOf(string); /* 198 */ int adding = string.length(); /* 199 */ int newSize = this.count + adding; /* 200 */ if (newSize > this.value.length) { /* 201 */ ensureCapacityImpl(newSize); /* */ } /* 203 */ string.getChars(0, adding, this.value, this.count); /* 204 */ this.count = newSize; /* 205 */ return this; /* */ }
StringBuilder
/* */ public StringBuilder append(String string) /* */ { /* 201 */ if (string == null) string = String.valueOf(string); /* 202 */ int adding = string.length(); /* 203 */ int newSize = this.count + adding; /* 204 */ if (newSize > this.value.length) { /* 205 */ ensureCapacityImpl(newSize); /* */ } /* 207 */ string.getChars(0, adding, this.value, this.count); /* 208 */ this.count = newSize; /* 209 */ return this; /* */ }