1 StringBuffer、StringBuilder、String的区别
1.1、一个类似于 String 的字符串缓冲区,但能被修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容,所有对StringBuffer或StringBuilder对象的字符序列的修改不会产生新的StringBuffer或StringBuilder对象,这点和String很大的不同。
value没有final声明,value可以不断扩容,count记录有效字符的个数。
1.2、StringBuilder:线程安全,效率低;StringBuffer:线程不安全,效率高
2 StringBuffer和StringBuilder不同的API
2.1、构造器
StringBuffer或StringBuilder对象的创建必须用new+构造器。
StringBuffer() 初始容量为16的字符串缓冲区
StringBuffer(int size) 构造指定容量的字符串缓冲区
StringBuffer(String str) 将内容初始化为指定字符串内容
2.2、和字符序列改变有关的方法
而且所有这些方法支持方法链
StringBuffer append(xx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer insert(int offset, xx):在指定位置插入xx
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer reverse() :把当前字符序列逆转
public static void main(String[] args) { StringBuffer sf = new StringBuffer(); sf.append(“hello”).append(“world”).append(“java”); System.out.println(sf); } |
方法链的原理
当append和insert时,如果原来value数组长度不够,可扩容
3 效率测试
package com.api.string;
public class TestStringBuilder {
public static void main(String[] args) { testStringBuilder(); testStringBuffer(); testString(); } public static void testString(){ long start = System.currentTimeMillis(); String s = new String(“0”); for(int i=1;i<=10000;i++){ s += i; } System.out.println(s); long end = System.currentTimeMillis(); System.out.println(“String拼接+用时:”+(end-start)); long memory = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory(); System.out.println(“String拼接+memory: ” + memory); } public static void testStringBuilder(){ long start = System.currentTimeMillis(); StringBuilder s = new StringBuilder(“0”); for(int i=1;i<=10000;i++){ s.append(i); } System.out.println(s); long end = System.currentTimeMillis(); System.out.println(“StringBuilder拼接+用时:”+(end-start)); long memory = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory(); System.out.println(“StringBuilder拼接+memory: ” + memory); } public static void testStringBuffer(){ long start = System.currentTimeMillis(); StringBuffer s = new StringBuffer(“0”); for(int i=1;i<=10000;i++){ s.append(i); } System.out.println(s); long end = System.currentTimeMillis(); System.out.println(“StringBuffer拼接+用时:”+(end-start)); long memory = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory(); System.out.println(“StringBuffer拼接+memory: ” + memory); } } |
上一篇: java培训技术之String类的常用方法
下一篇: 尚硅谷Netty视频教程重磅发布!