This week's book giveaway is in the OCMJEA forum. We're giving away four copies of OCM Java EE 6 Enterprise Architect Exam Guide and have Paul Allen & Joseph Bambara on-line! See this thread for details.
It depends. Do you really mean '5', or a variable holding 5? If you really mean a literal, then "" + 5 will be evaluated at compile time to be "5", so it will be more efficient than Integer.toString(5) which has to do the conversion at runtime.
But if we're talking about a variable holding 5, then the opposite is true: at runtime there will be a StringBuffer to do the catenation, and that will be converted to a String, so the catenation version will do a lot more work.
But you really shouldn't be worrying about such little things, most of the time.
Your best bet is going to be to write it in a way that is easy to read/maintain, and THEN use a profiler to see where the bottlenecks are. Often they are not where you think they'd be, and you end up spending a lot of time making minor improvements.
Using a profiler will show you exactly where you should be focusing your effort.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors