5

Possible Duplicate:
Comparing StringBuffer content with equals

StringBuffer s1= new StringBuffer("Test");
StringBuffer s2 = new StringBuffer("Test");
if(s1.equals(s2)) {
  System.out.println("True");
} else {
  System.out.println("False");
}

Why does that code print "False"?

Community
  • 1
  • 1
rocker
  • 11,317
  • 7
  • 22
  • 12
  • 3
    http://stackoverflow.com/questions/2012305/the-following-comparisons-are-returning-false-of-which-one-i-know – Mark Feb 03 '10 at 13:13
  • 2
    equals() method is of Object class. so every class has equals() method inherited from Object (Base class). String class has overriden equals() method to match exact content of to String. StringBuffer does not have overriden equals() method – Ravi1187342 Oct 03 '12 at 10:53

2 Answers2

7

StringBuffer does not override the Object.equals method, so it is not performing a string comparison. Instead it is performing a direct object comparison. Your conditional may as well be if(s1==s2). If you want to compare the strings you'll need to turn the buffers into strings first.

See http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuffer.html

Edit: I'm assuming we're in a java world.

p.s. If you're in a single-threaded environment, or your buffers are isolated to a single thread, you should really be using a StringBuilder instead of a StringBuffer.

Michael Krauklis
  • 3,914
  • 2
  • 28
  • 28
3

StringBuffer equals isn't overridden to check content. It's using the default "shallow equals" that compares references it inherits from java.lang.Object.

duffymo
  • 305,152
  • 44
  • 369
  • 561