In the implementation of StringBuffer the equals method of Object is not overridden. Therefore you get the behaviour defined for java.lang.Object:
"The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true)."
Personally I think it would have been better if the behaviour of StringBuffer was consistent with
String, but it isn't.