2015年9月1日 星期二

[Java]Sting、StringBuffer與StringBuilder

String因為字串池的關係,當你做出下面的運算時

Sting x = "a"+"b"+"c"+"d";
JVM會產生四個String物件,所以當你有字要串起來時為了節省記憶體通常不會使用String
而會使用StringBuffer與StringBuilder
那麼StringBuffer與StringBuilder到底要選什麼用呢?首先要了解兩者的不同
StringBuffer與StringBuilder第一個不同在於兩者的效能有明顯的差距
如下面範例

public class Test {

    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 ;) {

                sb.append("");

            }

            System.out.println(System.currentTimeMillis() - t);

        }

    }

}


那麼要建立String就用StringBuilder囉?
其實不見得
StringBuffer是synchronized,也就是在多執行緒上他比較不會發生錯誤
StringBuilder在多執行緒的程式上就必須注意Thread safe的問題

沒有留言:

張貼留言