Java中StringBuffer与StringBuilder的区别与举例

来源:互联网 发布:淘宝怎么刷信用卡套现 编辑:程序博客网 时间:2024/06/03 22:52

StringBuffer是线程安全的可变字符列,也就是说由它创建的字符串是可以改变的

StringBuffer类所构造出来的字符串可以由多个线程操作,但是同时只能有一个线程来操作它

它是一个类似于String的字符数组缓冲区(就当是字符数组),通过某些方法调用可以改变该序列的长度和内容。

每个字符串缓冲区都有一定的容量,只要字符串缓冲区所包含的字符序列的长度么有超出此容量,就无限分配新的内部缓冲区数组。

如果内部缓冲区溢出,则此容量自动增大。这就是动态字符串

StringBuilder是为StringBuffer类补充的一个单线程使用的等价类,不能由多个线程操作,只能由一个线程操作。

 多线程可以访问StringBuffer,而StringBuilder是专门为单线程所设计的动态字符串

与StringBuffer相比,通常应该优先使用StringBuilder,因为它支持所有相同的操作(也就是说StringBuffer有的StringBuilder都有,StringBuilder有的StringBuffer也都有,他们的内部结构也几乎一样,但是他们效率不一样),但由于StringBuilder不执行同步(就是说StringBuilder是单一线程操作的),所以速度更快。StringBuffer是同步的(就是说StringBuffer是多线程操作的,但是每次只能又一个线程操作。)。

 下面是一些小示例。

StringBuilder sb=new StringBuilder();sb.append("hello");System.out.println(sb);
输出hello   

append()方法就是往sb里面添加字符串

sb.append(1);sb.append(1.5);sb.append(true);
继续调用append(),输出hello11.5true

也就是说append()方法可以给字符串添加各种类型的东西。

System.out.println(sb.length());//字符串长度System.out.println(sb.capacity());//字符串容量
输出字符串sb的长度是13  容量是16  这里长度跟容量不是一样的,stringbuilder默认字符串长度是16,如果长度超过了容量,容量会自动增加为2倍+2

sb.insert(5, "world");//在第5的位置上插入world
这句执行完,输出的就是helloworld11.5true

sb.replace(5, 7, "el");//把第5 7两个字符替换成el
这句执行完了输出的就是 helloelrld11.5true
System.out.println(sb.indexOf("el"));//indexOf()就是返回指定字符串在原来字符串中第一次出现的下标
这句输出的是1,因为el在helloelrld11.5true中第一次出现的下标是1

System.out.println(sb.lastIndexOf("el"));//同样的,字符串最后一次出现的下标
这句输出的是5,因为el在 helloelrld11.5true中最后一次出现的下标是5

System.out.println(sb.reverse());//逆置字符串  翻转字符串
输出eurt5.11dlrleolleh

 当然还有一些别的方法,我没有列全,这些应该是常用的。








阅读全文
0 0
原创粉丝点击