String 如何实现字符串拼接

Java String StringBuffer StringBuilder

String,Stringbuffer,StringBuilder区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
字符拼接运行速度:
StringBuilder > StringBuffer > String

运行速度分析

StringBuilderStringBuffer 一样都是维护一个 char[] ,通过修改数组内容和长度来实现可变性,而StringBuffer多了线程安全的处理,所以性能不如 StringBuilder

String 是如何实现字符串拼接?

看下面一个简单程序

public class Test {
    public static void main(String[] args){
        String a = "hello ";
        a += "java";
        System.out.println(a);
    }
}

执行 javap -c Test来反编译以上代码
test.png
从以上反编译结果可以看出,JVM 已经自动引入了 StringBuilder 来进行字符串拼接,那 String 的拼接为什么还是比 StringBuilder慢呢?
再看另一段程序:

public class Test {
    public static void main(String[] args){

        String a = "hello ";
        for(int i = 0 ; i <= 1000; i++){
            a = a + "java";
        }
        System.out.println(a);
    }
}

这次引入了循环,反编译下,看下结果

test.png
可以看出,循环里面没次都 new 了一个新的StringBuilder, 而我们自己实例化 StringBuilder可以避免多次创建对象,也可以手动控制初始化长度等来提高性能。

创建于2020年03月10日 11:46
阅读量 406
留言列表

暂时没有留言

添加留言