今天來個簡單的題目,輕鬆一下:)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