美文网首页
String和StringBuffer以及StringBuild

String和StringBuffer以及StringBuild

作者: 暖熊熊 | 来源:发表于2018-08-06 22:03 被阅读0次

    String是一个字符串常量,其中的值不可以改变,虽然可以书写如下代码

    String s1 = "hello";
    s1 = s1+"world";
    System.out.println(s1);  //输出helloworld
    

    但是此时在第二行的s1是在字符串常量池新建了一个helloworld字符串,然后将s1的引用指向helloworld字符串。

    下面讨论效率
    首先是String,通过50000次for循环改变String的值,代码如下:

    int times = 50000;
    long start = System.currentTimeMillis();
    String string = "";
    for (int i = 0; i < times; i++) {
        string += i;
    }
    long end = System.currentTimeMillis();
    //6761毫秒
    System.out.println(end - start + "毫秒");
    

    然后是StringBuffer,同样是50000次for循环,代码如下:

    int times = 50000;
    long start = System.currentTimeMillis();
    StringBuffer string = new StringBuffer();
    for (int i = 0; i < times; i++) {
        string.append(i);
    }
    long end = System.currentTimeMillis();
    //15毫秒
    System.out.println(end - start + "毫秒");
    

    最后是StringBuilder,同样是50000次for循环,代码如下:

    //StringBuilder
    int times = 50000;
    long start = System.currentTimeMillis();
    StringBuilder string = new StringBuilder();
    for (int i = 0; i < times; i++) {
        string.append(i);
    }
    long end = System.currentTimeMillis();
    //15毫秒
    System.out.println(end - start + "毫秒");
    

    总结:可见String拼接字符串耗时很长,如果采用StringBuilder或者StringBuffer,效率将会提高450倍之多。因此如果我们在编写代码的时候遇到需要拼接多次的字符串,我们尽量去使用StringBuilder或者StringBuffer,而StringBuffer的方法是线程安全的,因此,在多线程的情况下,我们应该使用StringBuffer,单线程的情况下我们可以使用StringBuilder。

    相关文章

      网友评论

          本文标题:String和StringBuffer以及StringBuild

          本文链接:https://www.haomeiwen.com/subject/wchnvftx.html