其实,主要了解哪一个是多线程安全的就可以了。
StringBuffer 是多线程安全的。
这两个字符串类所拥有的 api 都是类似的。
性能的话,肯定是线程不安全的 StringBuilder 更加安全。
就用别人的代码测试一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class Main { public static void main(String[] args) { int N = 77777777; long t;
{ StringBuffer sb = new StringBuffer(); t = System.currentTimeMillis(); for (int i = N; i-- > 0;) { sb.append(""); } System.out.println(System.currentTimeMillis() - t); }
{ StringBuilder sb = new StringBuilder(); t = System.currentTimeMillis(); for (int i = N; i > 0; i--) { sb.append(""); } System.out.println(System.currentTimeMillis() - t); } } }
|
output:

这么一看,这个性能的差距还是有点明显的。看来写 leetcode
的时候可以多用一下这个 StringBuild,反正是单线程。
参考:
https://stackoverflow.com/questions/355089/difference-between-stringbuilder-and-stringbuffer