I am new to Java.
At first, I was testing the performance on String and StringBuilder in different cases.
However, I discovered that same code compiled by javac and eclipse performed differently.
I read about that String concatenation is actually using StringBuilder but why is that performance has so big difference in this case while String is 1.5x faster than StringBuilder.
Here is my testing code:
public class StringTest {
public StringTest() {
boolean flag = true;
int code = 10001, type = 1;
long time = System.nanoTime();
for (int i = 0; i < 10000000; ++i) {
String msg = Long.toString(i * 1000000000);
stringHandler(code, type, flag, msg);
}
System.out.println("Took " + (System.nanoTime() - time) + " ns by String");
time = System.nanoTime();
for (int i = 0; i < 10000000; ++i) {
String msg = Long.toString(i * 1000000000);
stringBuilderHandler(code, type, flag, msg);
}
System.out.println("Took " + (System.nanoTime() - time) + " ns by StringBuilder");
}
public String stringBuilderHandler(int code, int type, boolean flag, String msg) {
StringBuilder sb = new StringBuilder();
sb.append("{\"bool\":").append(flag).append(",")
.append("\"code\":").append(code).append(",")
.append("\"type\":").append(type).append(msg).append("}");
return sb.toString();
}
public String stringHandler(int code, int type, boolean flag, String msg) {
String str = "{\"bool\":";
str += flag;
str += ",";
str += "\"code\":";
str += code;
str += ",";
str += "\"type\":";
str += type;
str += msg;
str += "}";
return str;
}
public static void main(String[] args) {
StringTest st = new StringTest();
}
}
Using javac 1.8:
Took 1066623964 ns by String
Took 1540007855 ns by StringBuilder
Using Eclipse:
Took 4282720864 ns by String
Took 1709934263 ns by StringBuilder