string中stringbuffer和stringbuilder的区别?
程序员文章站
2022-03-22 14:27:08
...
string中stringbuffer和stringbuilder的区别是:1、StringBuffer是线程安全,而StringBuilder是线程不安全;2、StringBuffer公开方法同步,而StringBuilder没有。
string中stringbuffer和stringbuilder的区别是:
区别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。
相关学习推荐:Java视频教程
以上就是string中stringbuffer和stringbuilder的区别?的详细内容,更多请关注其它相关文章!
推荐阅读
-
PHP函数addslashes和mysql_real_escape_string的区别_PHP教程
-
php中time()和mktime()用法的区别分析
-
详解PHP中strlen和mb_strlen函数的区别_PHP教程
-
PHP中的socket_read和socket_recv区别详解
-
php中include()和require()以及include_once()和require_once()的区别
-
php中mysqli_fetch_assoc()和mysqli_fetch_row()的区别_PHP教程
-
vue中watch和computed的区别与使用方法
-
PHP中单引号和双引号的区别
-
JavaScript中基本数据类型和引用数据类型的区别
-
ALAsset中fullScreenImage和fullResolutionImage使用中的区别