The 'why can't String contents be changed' question has been asked many times. See these results.
Your second question: How is StringBuffer content changeable might not be asked so often. The StringBuffer content is changeable by virtue that it holds the character sequence in a format that can be modified and provides methods with which to do the modification - methods for doing things like appending, inserting, and deleting from the internal sequence of characters.
You showed up just in time for the waffles! And this tiny ad: