string builder和string buffer的区别

如题所述

 1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String
  2.String <(StringBuffer,StringBuilder)的原因
    String:字符串常量
    StringBuffer:字符创变量
    StringBuilder:字符创变量
    从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
1 String s = "abcd";
2 s = s+1;
3 System.out.print(s);// result : abcd1

    我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来    执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
    而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
  3.一个特殊的例子:
1 String str = “This is only a” + “ simple” + “ test”;
3 StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

  
    你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:
    String str = “This is only a” + “ simple” + “test”;
    其实就是:
    String str = “This is only a simple test”;
    所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
    String str2 = “This is only a”;
    String str3 = “ simple”;
    String str4 = “ test”;
    String str1 = str2 +str3 + str4;
    这时候JVM会规规矩矩的按照原来的方式去做。
  4.StringBuilder与 StringBuffer
    StringBuilder:线程非安全的
    StringBuffer:线程安全的
    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结: 1.如果要操作少量的数据用 = String
           2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
           3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-03-21
StringBuffer属于线程安全,相对为重量级
StringBuilder属于非线程安全,相对为轻量级
线程安全的概念: 网络编程中许多线程可能会同时运行一段代码。当每次运行结果和单独线程运行的结果是一样的,叫做线程安全。 为了达到线程安全的目的在一定程度上会降低程序的性能。所以在单线程中,StringBuilder的性能要比StringBuffer高。多线程为了线程安全需要采用StingBuffer。其实在线程不考虑的情况下,要是程序对性能的要求不高,太在意这两者的区别就没有什么意义。本回答被提问者采纳
第2个回答  2016-03-21
1. 在执行速度方面的比较:StringBuilder > StringBuffer
2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
3. StringBuilder:线程非安全的
  StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:1.如果要操作少量的数据用 = String
       2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
       3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

stringbuffer与stringbuilder的区别
StringBuffer和StringBuilder是Java中用于处理字符串的两种常用类,它们在功能上非常相似,但在使用方式和性能上存在一些微妙的差异。 首先,StringBuffer是一个线程安全的类,而StringBuilder则不是。这意味着在多线程环境中,如果你需要修改字符串,应该使用StringBuffer,因为它提供了同步机制来防止多个线程同时修改字符串时可能...

Java中String,StringBuilder和StringBuffer的区别
String是一个被final修饰的终结类,创建了字符串以后就是不能被修改的,通过"+"或者new等方式创建都会在内存中新增对象,这样对于需要多次拼接字符串的算法来说,系统开销太大,不适合用于多个字符串拼接;StringBuilder和StringBuffer是为了解决上述问题而诞生的字符串拼接类;又由于java的语言特性-多线程。...

Java中String,StringBuilder和StringBuffer的区别
String 类型和StringBuffer的主要性能区别:String是不可变的对象, 因此在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM ...

Java中String,StringBuffer和StringBuilder的区别和堆栈内存分配_百度...
String:字符串常量 StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:String s = "abcd";s = s+1;System.out.print(s);\/\/ result : abcd1我们明明就是改变...

string和stringbuillder的区别和用法 c
需要说明的是,CharSequence就是字符序列,String, StringBuilder和StringBuffer本质上都是通过字符数组实现的!StringBuilder 和 StringBuffer 的区别 StringBuilder 和 StringBuffer都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了CharSequence接口。但是,StringBuilder是非线程安全的,而StringBuffer是...

go语言string之Buffer与Builder
但是对s重新赋值后,意味着s的地址指向了“WORLD”,它们所使用的内存空间不同了,所以s改变后,b并不会改变。所以他们的区别就在于 bytes.Buffer 是重新申请了一块空间,存放生成的string变量, 而strings.Builder直接将底层的[]byte转换成了string类型返回了回来,去掉了申请空间的操作。

java中String, StringBuffere,StringBuilder, StringTokenizer的区别是什...
StringBuffer()StringBuffer(int size)StirngBuffer(String s)当使用第1个无参数的构造方法时,分配给该对象的实体初始容量可以容纳16个字符,当该扩展字符序列长度>16时,实体容量自动增加以适应新字符串。当使用第2个构造方法,可以指定分配给该对象的实体的初始容量为参数size指定的字符个数。当对象实体...

怎么理解Stringbuffer 是线程安全的 stringbuilder是线程不安全的
StringBuffer 线程安全 StringBuilder 线程不安全 5.速度 一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。6.总结 (1).如果要操作少量的数据用 = String (2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder (3).多线程操作字符串缓冲区 下操作...

Java的字符串都有什么?字符串可以转换为任意数值吗?
其次,StringBuilder类主要称为用于构建字符串的字符串,因为StringBuilder类用于提高性能,因为String类不会更改,实际上虚拟机在更改String类时在底层运行。StringBuilder和StringBuffer有什么区别?StringBuilder和StringBuffer的功能没有显著区别,除了消除非线程安全问题,有效地降低了成本以外,在大多数情况下是...

Java设计模式之-建造者模式
以手机和电脑为例,定义包含SPU、SKU、库存属性的产品类,Builder类定义发布流程,ConcreteBuilder实现具体产品发布,Director控制产品创建过程。客户端通过Director发布所需产品。在JDK中,StringBuilder和StringBuffer采用类似建造者模式,允许动态构建字符串,避免创建多个临时对象。StringBuilder继承自Abstract...

相似回答