Well, using a StringBuffer (or now in 1.5, StringBuilder) is optional, yes. But that's not the main point of Tony's statement. He's pointing out that since both "Raj" and " Mohan" are
compile-time constants, the expression
"Raj" + " Mohan"
is also a compile-time constant, and so it will be evaluated at compile time so that the class file contains a single constant, "Rajjava Mohan", rather than two separate ones. So at runtime, there's nothing to concatenate with a StringBuffer or StringBuilder; it's already been done.