I've used a memory profiler to get the exact counts.
On my machine, the first example creates 8 objects:
String s = "a";
s = s + "b";
s = s + "c";
- two objects of type
String
;
- two objects of type
StringBuilder
;
- four objects of type
char[]
.
On the other hand, the second example:
StringBuffer sb = new StringBuffer("a");
sb.append("b");
sb.append("c");
creates 2 objects:
- one object of type
StringBuilder
;
- one object of type
char[]
.
This is using JDK 1.6u30.
P.S. To the make the comparison fair, you probably ought to call sb.toString()
at the end of the second example.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…