【可变与不可变】

  • String是字符串常量,不可变。
  • StringBuffer和StringBuilder是字符串变量,可变。

【执行速度方面】

  • StringBuilder > StringBuffer > String (StringBuilder是线程不安全的,StringBuffer是线程安全的)

为什么执行速度StringBuffer一般大于String?

因为String是不可变的对象,如果使用String进行字符串操作,如字符串拼接,会生成很多的中间String对象,这些对象如果不能及时被GC回收器回收,就会一直占用内存,导致程序运行变慢,也就是手机或电脑经常出现的卡机现象。

为什么执行速度StringBuilder大于StringBuffer?

因为StringBuffer是线程安全的,所以对于多线程访问的场景,编译器会对StringBuffer表示的字符串缓冲区进行加锁,所以访问起来会慢一点,看到一个比较形象的解释,就是回家拿东西,当家里有门的时候,需要掏钥匙开锁然后拿东西,当家里没门的时候就可以直接到房间里去拿东西,自然就快了。

【使用场景】

  • 在涉及到比较大的数据量,需要使用字符串拼接时,尽量使用StringBuffer和StringBuilder,而不是String,当涉及到较少的数据量时,直接使用String就好。
  • 单线程操作字符串缓冲区的大量的数据时用StringBuilder,效率更高;多线程操作字符串缓冲区的大量数据时用StringBuffer,线程更安全。

【备注】

对于使用“+”操作符来拼接字符串,虽然编译器会自动创建StringBuilder(Java SE5引入)对象,来进行优化,但这个优化程度是有限制的,看下面的例子:

    public String implicit(String[] fields) {
String result = "";
for (int i = 0; i < fields.length; i++) {
result += fields[i];
}
return result;
} public String explicit(String[] fields) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
result.append(fields[i]);
}
return result.toString();
}

对于implicit方法,编译器在每一次进行for循环时都会创建一个StringBuilder对象;而explicit显式地创建一个StringBuilder对象只需要一次,而且在知道目标字符串大小的情况下,还可以指定StringBuilder的大小,这样可以避免多次重新分配缓冲。

Java String,StringBuffer和StringBuilder的区别的更多相关文章

  1. JAVA String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  2. Java String, StringBuffer和StringBuilder实例

    1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...

  3. 【Java】String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  4. java中String,StringBuffer与StringBuilder的区别??

    本文着重介绍下,应该在何时恰当的使用string,stringbuffer,stringbuilder. 1,执行速度 StringBuilder >  StringBuffer  >  ...

  5. String,StringBuffer与StringBuilder的区别??

    转自http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBu ...

  6. 转 String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  7. String,StringBuffer与StringBuilder的区别??[转]

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  8. String,StringBuffer与StringBuilder的区别?? 缓存

    转: String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主 ...

  9. 《转》String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  10. (转)String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

随机推荐

  1. css左右居中的几种常见方法

    本人是前端的新人,这是第一次写技术博客,各位大大,本文有错误请指正,手中的板砖尽量轻拍,我怕疼~~ 对于水平居中和垂直居中我也用过很多方法,但是有的时候管用有的时候又嗝屁不好使了.涉及到的情况很多,所 ...

  2. 前端mac下的工具

    1.制作base64图片的 DataURLMaker imageAlpha 减少png图片尺寸 2.共享iphone X-Mirage 3.制作交互图 briefs 4.制作矢量图 sketch

  3. 转:xampp-php5.6下安装memcached.exe

    1.下载PHP对应版本的php_memcache.dll,我的PHP 5.6.3 所以下载 ,根据phpinfo输出的信息来找出匹配的版本: (1)看 Compiler,的后缀,一般带有vc11的字样 ...

  4. 构建winform控件数据缓存器

    DataBindingHelper使用手册 1.引用Rabbit.Core.dll文件 也就是我自己编写的功能库Rabbit.Core.dll呵呵. Rabbi.Core.DLL密码:dgqv     ...

  5. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

  6. SQL Server(三):Select语句

      1.最基本的Select语句: Select [Top n [With Ties]] <*|Column_Name [As <Alias>][, ...n]> From & ...

  7. 《On Lisp》第四章第三节图4.3中的prune函数fix

    这个函数作者的原意是删除表中test位真的部分,并且表按原样返回. 作者给出的的测试用例如下: (prune #'evenp '(1 2 (3 (4 5) 6) 7 8 (9))) 返回结果是: (1 ...

  8. 一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端

    上一篇文章,我们了解了客户端如何与服务器创建WebSocket连接.但是一个巴掌拍不响,既然是通信,就必然最少要有两个端.今天我们来看看c#如何用已有的框架实现一个WebSocket服务端. 在.Ne ...

  9. Loadrunner不能调用IE解决方法大全

    在使用loadrunner进行性能调试时,录制脚本的时候,发现loadrunner不能调用IE.不能自动启动IE,还有一种情况是可以启动,但是录制不到内容,action的内容为空. 一般遇到这种情况, ...

  10. npm 换源

    npm config set registry https://registry.npm.taobao.org