String.format() vs "+" operator
concatenation, java, string, string-concatenation
Solution
If you are looking for performance only I believe that using `StringBuilder/StringBuffer` is the most efficient way to build strings. Even if the Java compiler is smart enough to translate most of String concatenations to `StringBuilder` equivalent.
If you are looking for readability the `String.format` thing is the much clearer I think, and this is what I use also unless I need to rely on high performance.
So if your main concern is not performance, meaning this code is not in a path that is called a lot, you may prefer to use `String.format` as it gives a better idea of the resulting String (like you said).
Besides, using `String.format` lets you use the format thing, which means you can use it for padding Strings, formatting numbers, dates, and so on, which would make the code even worse if using simple concatenation.
Edit for Chuu:
Using JAD, you can see that the following code:
public class Test {
public static void main(String[] args) {
String str = "a" + "b" + "c";
String str2 = "foo" + str + "bar" + str;
System.out.println(str2);
}
}
when decompiled will look like:
public class Test {
public static void main(String[] args) {
String str = "abc";
String str2 = new StringBuilder("foo").append(str).append("bar").append(str).toString();
System.out.println(str2);
}
}
Proof of that can also be found using the `javap` utility that will show you the Java bytecode under a `.class` file:
public static void main(java.lang.String[] args);
0 ldc <String "abc"> [16]
2 astore_1 [str]
3 new java.lang.StringBuilder [18]
6 dup
7 ldc <String "foo"> [20]
9 invokespecial java.lang.StringBuilder(java.lang.String) [22]
12 aload_1 [str]
13 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
16 ldc <String "bar"> [29]
18 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
21 aload_1 [str]
22 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
25 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [31]
28 astore_2 [str2]
29 getstatic java.lang.System.out : java.io.PrintStream [35]
32 aload_2 [str2]
33 invokevirtual java.io.PrintStream.println(java.lang.String) : void [41]
36 return
Problem
What should be used for a basic string concatenation operation ? ``` String randomString = "hello " + userName + " how are you" ? ``` or ``` String randomString = String.format("hello %s how are you ?",userName); ``` I feel `String.format()` gives a better idea of output string. But what are actually pro and cons in using any of one ? Is there anything in terms of performance or orphan entries in string literal pool. Edit : I am talking about multiple parameters in string, not just one. Around 5 +. Bonus Question : Please also share your view on which one should actually use ? any one of these or 3rd one... !! ?