Case 1 is concise, expresses the intent clearly, and is equivalent to case 3.
Case 2 is less efficient, and also less readable.
Case 3 is nearly as efficient as case 1, but longer, and less readable.
Using case 3 is only better to use when you have to concatenate in a loop. Otherwise, the compiler compiles case 1 to case 3 (except it constructs the StringBuilder with new StringBuilder(a)
), which makes it even more efficient than your case 3).