首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Java基础篇】String、StringBuffer和StringBuilder的区别

【Java基础篇】String、StringBuffer和StringBuilder的区别

作者头像
程序员云帆哥
发布2022-05-12 09:30:59
发布2022-05-12 09:30:59
3090
举报
文章被收录于专栏:程序员云帆哥程序员云帆哥

String类是不可变类(final修饰),即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

代码语言:javascript
复制
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换成一个String对象。

StringBuilder类,它也代表字符串对象。实际上,StringBuffer和StringBuilder基本相似,两个类的构造器和方法也基本相同。不同的是,StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder类。

执行速度比较

代码语言:javascript
复制
public class JavaTest {
    public static void main(String[] args) {
        test1();
        test2();
        test3();
    }

    //String
    static void test1() {
        String str = null;
        Long start = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            str = str + "hello world!";
        }
        System.out.println("耗时:" + (System.currentTimeMillis() - start));
    }

    //StringBuffer
    static void test2() {
        StringBuffer sb = new StringBuffer();
        Long start = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            sb.append("hello world!");
        }
        System.out.println("耗时:" + (System.currentTimeMillis() - start));
    }

    //StringBuilder
    static void test3() {
        StringBuilder sb = new StringBuilder();
        Long start = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            sb.append("hello world!");
        }
        System.out.println("耗时:" + (System.currentTimeMillis() - start));
    }
}

控制台输出:

代码语言:javascript
复制
耗时:46029
耗时:11
耗时:9

三者的执行速度方法:StringBuilder > StringBuffer > String

使用场景:

  • 如果要操作少量的数据用->String
  • 单线程操作字符串缓冲区下操作大量数据->StringBuilder
  • 多线程操作字符串缓冲区下操作大量数据->StringBuffer
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 执行速度比较
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档