本帖最后由 廖成 于 2013-1-26 11:32 编辑
StringBuffer 线程安全
StringBuilder 线程不安全
为了达到线程安全的目的在一定程度上会降低程序的性能。所以在单线程中,StringBuilder的性能要比StringBuffer高。多线程为了线程安全需要采用StingBuffer。其实在线程不考虑的情况下,要是程序对性能的要求不高,太在意这两者的区别就没有什么意义。
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String.当需要在循环中多次使用字符串拼接时,建议使用StringBuilder或StringBuffer.当数量级在百万级(这里可能不准确)时,StringBuilder的速度会体现出来.
实验代码:- final static int ttime = 30000;// 测试循环次数
- public void test(String s) {
- long begin = System.currentTimeMillis();
- for (int i = 0; i < ttime; i++) {
- s += "add";
- }
- long over = System.currentTimeMillis();
- System.out.println(" 操作 " + s.getClass().getName() + " 类型使用的时间为: " + (over - begin) + " 毫秒 ");
- }
- public void test(StringBuffer s) {
- long begin = System.currentTimeMillis();
- for (int i = 0; i < ttime; i++) {
- s.append("add");
- }
- long over = System.currentTimeMillis();
- System.out.println(" 操作 " + s.getClass().getName() + " 类型使用的时间为: " + (over - begin) + " 毫秒 ");
- }
- public void test(StringBuilder s) {
- long begin = System.currentTimeMillis();
- for (int i = 0; i < ttime; i++) {
- s.append("add");
- }
- long over = System.currentTimeMillis();
- System.out.println(" 操作 " + s.getClass().getName() + " 类型使用的时间为: " + (over - begin) + " 毫秒 ");
- }
- // 对 String 直接进行字符串拼接的测试
- public void test2() {
- String s2 = "abadf";
- long begin = System.currentTimeMillis();
- for (int i = 0; i < ttime; i++) {
- String s = s2 + s2 + s2;
- }
- long over = System.currentTimeMillis();
- System.out.println(" 操作字符串对象引用相加类型使用的时间为: " + (over - begin) + " 毫秒 ");
- }
- public void test3() {
- long begin = System.currentTimeMillis();
- for (int i = 0; i < ttime; i++) {
- String s = "abadf" + "abadf" + "abadf";
- }
- long over = System.currentTimeMillis();
- System.out.println(" 操作字符串相加使用的时间为: " + (over - begin) + " 毫秒 ");
- }
- public static void main(String[] args) {
- String s1 = "abc";
- StringBuffer sb1 = new StringBuffer("abc");
- StringBuilder sb2 = new StringBuilder("abc");
- Test t = new Test();
- t.test(s1);
- t.test(sb1);
- t.test(sb2);
- t.test2();
- t.test3();
- }
复制代码 |