[每日一題]對比Java中的String、StringBuffer、StringBuilder

今天來個簡單的題目,輕鬆一下:)java

相信不少人對這個問題都不陌生,只要是個Java程序員,確定就用過這幾個類: 一、String是個不可變對象,這就意味着每次字符串拼接都是建立了新的實例 二、StringBuilder和StringBuffer都是專門用來作字符串拼接的 三、StringBuffer是線程安全的,StringBuilder是線程不安全的 四、線程安全是要付出代價的,因此StringBuffer比StringBuilder要慢一點點程序員

OK,上面四條是否是滾瓜爛熟了?那問個具體問題:面試

一、如下虛構出來的三種寫法哪一個速度最快?哪一個最差?安全

String str = "I" + "love" + "Java" + "Python" + ... + "Golang"; 
String str = new StringBuilder("I").append("love").append("Java").append("Python").append(...).append("Golang").toString(); 
String str = new StringBuffer("I").append("love").append("Java").append("Python").append(...).append("Golang").toString();

解答:由於都是字符串字面量,第一種寫法速度最快,在JVM看來就至關因而 String str = "IloveJavaPython...Golang」 ,固然了,這麼寫純屬蛋疼,爲了考察知識點而已,諸君付之一笑:)第三種用了StringBuffer的最慢,呵呵微信

若是是這麼寫呢?多線程

String a = "I"; 
String b = "love"; 
String c = "Java"; 
String d = "Python"; 
... 
String e = "Golang"; 
String str = a + b + c + d + ... + e;

變量之間用+鏈接,再也不是字符串字面量,這種寫法將會是最慢滴app

二、再來看一個,問:下面這個方法能夠用於多線程環境麼?ui

public static String build(String... args) { 
    StringBuilder buf = new StringBuilder(); 
    for (int i = 0; i < args.length; i++) { 
        buf.append(args[i]); 
    } 
    return buf.toString(); 
}

解答:此處的StringBuilder是個局部變量,雖然說StringBuilder自己是線程不安全的,可是用在此處沒有任何問題哈:)線程

這是第八個面試題了,一我的天天更新太難堅持了,求投稿啊求投稿:)code

本文來自微信公衆號:it_mianshiti it_mianshiti

相關文章
相關標籤/搜索