If a string is going to remain constant throughout the program,
then use the String class object because a String object is immutable.
If a string can change (for example: lots of logic and operations in the construction of the string)
and will only be accessed from a single thread, using a StringBuilder is good enough.
If a string can change and will be accessed from multiple threads,
use a StringBuffer because StringBuffer is synchronous,
so you have thread-safety.
If you don’t want thread-safety than you can also go with StringBuilder class as it is not synchronized.