温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中StringBuffer和StringBuilder的区别有哪些

发布时间:2021-09-10 10:59:22 来源:亿速云 阅读:140 作者:chen 栏目:编程语言

本篇内容主要讲解“Java中StringBuffer和StringBuilder的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中StringBuffer和StringBuilder的区别有哪些”吧!

先看看 StringBuffer 和 StringBuilder 的类结构吧:

其实很简单,就是继承了一个抽象的字符串父类:AbstractStringBuilder。下面我们再来看看它们的三个区别。

区别1:线程安全

StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized  修饰的,而 StringBuilder 并没有 StringBuilder 修饰。

StringBuffer 代码片段:

@Override public synchronized StringBuffer append(String str) {     toStringCache = null;     super.append(str);     return this; }

区别2:缓冲区

StringBuffer 代码片段:

private transient char[] toStringCache;  @Override public synchronized String toString() {     if (toStringCache == null) {         toStringCache = Arrays.copyOfRange(value, 0, count);     }     return new String(toStringCache, true); }

StringBuilder 代码片段:

@Override public String toString() {     // Create a copy, don't share the array     return new String(value, 0, count); }

可以看出,StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。

而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。

所以,缓存冲这也是对 StringBuffer 的一个优化吧,不过 StringBuffer 的这个toString 方法仍然是同步的。

区别3:性能

既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder  是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。

总结

所以,StringBuffer 适用于用在多线程操作同一个 StringBuffer 的场景,如果是单线程场合 StringBuilder  更适合。

到此,相信大家对“Java中StringBuffer和StringBuilder的区别有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI