I know this question has been answered many times in many sites many years ago.:P Still I have some doubt so thought of posting this. The basic difference is, String is immutable and each time we do any operation on String it creates a new String Object.
Ex:-
String str = "some";
str = str + " text"
In above case 2 new Strings get created instead of modifying the existing str which can be avoided by using StringBuffer.
Ex:-
StringBuffer str = new StringBuffer();
str.append("try");
str.append("this");
My question here is, to append method we are passing a String again. Do new String objects not get created for "try" and "this" in String pool in above case.