Vergleichen von StringBuffer Instanzen

Wir betrachten den Wertvergleich zweier StringBuffer Instanzen:

Code Ergebnis
final StringBuffer
  a = new StringBuffer("test"),
  b = new StringBuffer("test");

System.out.println(a.equals(b));
false

Für String Instanzen erhalten wir hingegen:

Code Ergebnis
final String
  a = new String("test"),
  b = new String("test");

System.out.println(a.equals(b));
true

Erklären Sie dieses unterschiedliche Ergebnis.

Hinweis: Vergleichen Sie die Klassen String und StringBuffer im Hinblick auf die Implementierung der equals() Methode.