The String class is immutable, however StringBuffer and StringBuilder classes are not immutable. There's no reason to use a StringBuffer or StringBuilder unless you're planing on changing the contents.
- The String class overrides the default equals() method, but StringBuffer and StringBuilder do not override the default equals() method in Object class. The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null 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). For example,
public class Program { public static void main(String [] args) { String s1 = new String("Hello World"); String s2 = new String("Hello World"); System.out.println("s1.equals(s2):" + s1.equals(s2)); StringBuffer sb1 = new StringBuffer("Hello World"); StringBuffer sb2 = new StringBuffer("Hello World"); System.out.println("sb1.equals(sb2):" + sb1.equals(sb2)); StringBuilder sd1 = new StringBuilder("Hello World"); StringBuilder sd2 = new StringBuilder("Hello World"); System.out.println("sd1.equals(sd2):" + sd1.equals(sd2)); } }