[每日一题]对比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

相关文章
相关标签/搜索