当前位置:  编程技术>java/j2ee

全面解释java中StringBuilder、StringBuffer、String类之间的关系

    来源: 互联网  发布时间:2014-10-22

    本文导语:  1. String 类   String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 String a = "a"; //假设a指向地址0x0001 a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保...

1. String 类

  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。
String a = "a"; //假设a指向地址0x0001
a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。
因此String的操作都是改变赋值地址而不是改变值操作。

2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

3.StringBuffer
  StringBuffer和StringBuilder类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。

4.线程安全
StringBuffer 线程安全
StringBuilder 线程不安全

5.速度
一般情况下,速度从快到慢:StringBuilder>StringBuffer>String,这种比较是相对的,不是绝对的。

6.总结
(1).如果要操作少量的数据用 = String
(2).单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
(3).多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

以下是代码与演示说明:

代码如下:

public class TestCharacter {
final static int time = 50000; //循环次数

public TestCharacter(){

}
public void test(String s){
long begin = System.currentTimeMillis();
for(int i=0; i

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • classpath里的.;到底有什么用?能解释解释吗?
  • CentOS安装Telnet,以root用户登陆Telnet以及CentOS的各种终端解释
  • 请问java的xml解释器有哪些?怎么能在applet里用这些解释器?
  • 大虾们给我解释解释这个输出问题。这里小弟先谢了。
  • 实在是不能理解,谁能帮我解释解释!
  • 能不能帮我解释解释什么是EJB?
  • 关于"symbol lookup error"问题的诡异现象,高手帮忙解释解释
  • alex 解释器 alexinterpreter
  • 地震解释软件系统 OpendTect
  • 请教高人来解释一下小弟关于poll()函数的疑惑
  • Java源代码解释器 Beanshell
  • 这个"."怎么解释?
  • 高手帮忙解释
  • 请详细解释javamail里的“收件人类型”的CC,TO,BCC的意义???
  • linux中/dev下都是些什么文件啊?大侠们谁可以帮我解释一下?
  • 多线程的例子。但是不知道为什么看不懂。唉,笨:(各们帮帮忙了给我解释解释
  • 数字电视CA卡解释模块 OSCam
  • markdonw解释器 sundown
  • Brainfuck编译器和JIT解释器 bfc
  • 高手帮忙解释 iis7站长之家




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3