public static void testStringBuffer(){
long start System currentTimeMillis();
StringBuffer sbuf = new StringBuffer();
for(int=0;i<20000;i++){
    sbuf.append(i+",");
  }
System.out.println(System, currentTimeMillis()- start);
}
public static void teststringBulider(){
  long start = System currentTimeMillis();
  StringBuilder builder = new StringBuilder(
  for (int i =0; i< 20000: i++)(
    builder. append(i +",");
    System, out. printIn(System. currentTimeMilliso- start);
    }
  }
public static void main(String[] args){
  teststring();
teststringBuffer();
  teststringBulider();
  }

区别一:性能

运行结果如下:1217  9  6

从测试结果看出, String类每次追加字符串都会创建新的对象,消耗的时间最长,性能极差。

而 String Buffer和 String Builder每次追加字符串都是同一个对象,消耗的时间极短,性能良好。

而 String Buffer比 String builder消耗时间长一点点,这又是什么原因呢?别看急,继续往下看,

区别二:线程是否安全

· String:线程不安全    · String Buffer:线程安全     · String Builder:线程不安全

String Buffer和 String Builder的使用几乎完全相同,唯一的区别就是线程安全性不同。

正是因为 String Buffer是线程安全的(支持同步锁),所以性能比String Builder稍差一点。

可以看到 String Builder速度是最快的,但当在多线程中使用 String Builder的操作是不安全的,而但 String Buffer是可以正确操作的。

当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用 String Builder而不用String Buffer的。

总结:

1.如果要操作少量的数据使用 String。

2 多线程操作字符串缓冲区下操作大量数据使用 String Buffe。

3.单线程操作字符串缓冲区下操作大量数据使用 String Builde。

String、StringBuilder、StringBuffer 区别的更多相关文章

  1. String StringBuilder StringBuffer区别

    String StringBuilder StringBuffer String类是final类,不可以被继承,且它的成员方法也是final方法,当一个字符串对象进行操作操作时,任何的改变不会影响到这 ...

  2. JAVA记录-String/StringBuilder/StringBuffer区别

  3. String, StringBuilder, StringBuffer问题

    1. 区别 String为字符串常量,而StringBuilder和StringBuffer都是字符串变量,其中StringBuilder线程非安全,StringBuffer线程安全. 每次对 Str ...

  4. String,StringBuilder,StringBuffer的对比测试

    public class TestString { private static final int COUNT = 10000000; public static void main(String ...

  5. JDK源码分析系列---String,StringBuilder,StringBuffer

    JDK源码分析系列---String,StringBuilder,StringBuffer 1.String public final class String implements java.io. ...

  6. java中String StringBuilder StringBuffer比较和效率(性能)测试

    string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...

  7. 深入源码剖析String,StringBuilder,StringBuffer

    [String,StringBuffer,StringBulider] 深入源码剖析String,StringBuilder,StringBuffer [作者:高瑞林] [博客地址]http://ww ...

  8. difference among String,StringBuilder,StringBuffer

    difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...

  9. String Stringbuilder Stringbuffer的区别

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

  10. java中string stringbuilder stringbuffer 的区别

    1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...

随机推荐

  1. 【转】sqlserver使用sql导出索引

    转自:http://blog.itpub.net/16436858/viewspace-609341/ BEGIN WITH tx AS ( SELECT a.object_id ,b.name AS ...

  2. hive 表新增字段后更新分区无法显示数据

    解决方案: 1.删除分区后重新跑数据 alter table drop partition(分区字段=“”): 2.新增字段运行程序后其实数据已经有了,只是查询hive的时候无法显示出来, 这个时候只 ...

  3. WebApp的自动测试工具: protractor和selenium

    Protractor是Selenium的扩充,支持Angularjs element(by.css('my-css')).click(); 一.用by的各种Locator定位元素 选中1个元素: el ...

  4. 稀疏矩阵 part 4

    ▶ 各种稀疏矩阵数据结构下 y(n,1) = A(n,m) * x(m,1) 的实现,GPU版本 ● MAT 乘法 __global__ void dotGPU(const MAT *a, const ...

  5. Oracle数据库row_number详解<转>

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  6. Java反射讲解

    首先我们通过代码来看看发射的作用到底是什么. 1. 首先准备两个很简单的业务类 2. 非反射方式切换不同的业务方法调用 当需要从第一个业务方法切换到第二个业务方法的时候,使用非反射方式,必须修改代码, ...

  7. hadoop的环境变量

    # hadoop && yarn export HADOOP_PREFIX=/home/ochadoop/apps/hadoop export HADOOP_HOME=${HADOOP ...

  8. python3下调用系统massagebox对话框

    #python3下调用系统massagebox对话框#先安装pwin32插件https://github.com/mhammond/pywin32/releases import win32apiim ...

  9. websocket的子协议stomp协议

    stomp协议Spring实现 服务器注册EndPoint 用来与客户端建立websocket连接 websocket连接的建立应该与客户端与服务器之间的通道无关 jdk中 javax下的websoc ...

  10. Django12-ModelForm中创建局部钩子和全局钩子

    一.局部钩子 命名规则为clean_对象名称,例如上面定义了username.pwd对象,那么可以定义clean_username.clean_pwd的局部钩子进行规则校验 1.例子:定义一个手机号校 ...