编程语言
首页 > 编程语言> > _数组_StringBuilder和StringBuffer的使用_常用方法_方法链的实现_JDK源码分析内部机制

_数组_StringBuilder和StringBuffer的使用_常用方法_方法链的实现_JDK源码分析内部机制

作者:互联网

package cn.bjsxt.stringBuilder;
/**
* String 叫不可变字符序列
* 测试可变字符序列:StringBuilder(线程不安全,效率高),StringBuffer(线程安全,效率低)
* 一般使用局部变量一般使用StringBuilder
* @author 神奇的梦
*
*/
public class Test01 {
public static void main(String[] args) {
// 创建时默认传了一个长度为16的字符数组
StringBuilder sb= new StringBuilder();//字符数组长度初始为16
StringBuilder sb1= new StringBuilder(32);//字符数组长度初始为32
StringBuilder sb2= new StringBuilder("abcd");
// 字符数组长度初始为32,
// value[]={'a','b','c','d',null,null...}


// append相当于把你要加的东西变为字符串之后加到后面
sb2.append("efg");
sb2.append(true);
sb2.append(false).append(321).append("随便");
//通过return this实现方法链
System.out.println(sb2);
// append是把原先的数组回收了,重新建了一个新的数组

// 查看append有多少个方法
// eclipse编译器
// 选中StringBuilder ctrl+单击打开StringBuilder.class文件
// 选择window然后选择show view然后选择Outline

// 在这里只有两个对选哪个new一个 a一个

// ensureCapacityInternal 确保容量
// ensureCapacity 扩展容量
// 把数组value里面的值拷贝到新数组里面
// Arrays.copyOf(数组里面的值(value),新数组长度)

// 这里的长度超过17了
StringBuilder gh1=new StringBuilder("a");//数组的长度刚开始定了17就是17,不能变了
// value默认初始长度为16,会根据长度分配存储空间,如果长度超过了分配空间会按照value*2+2重新分配存储空间
// value原先指向老数组,新建数组后引用会指向新数组,会把老数组回收掉
// 通过这种方式实现数组的扩容

for(int i=0;i<1000;i++) {
gh1.append(i);
}
System.out.println(gh1);
}
}

package cn.bjsxt.stringBuilder;
/**
* 测试StringBuilder的一些常用方法
* @author 神奇的梦
* 数组查询方便,但是插入、删除、修改不方便
*
*/

public class Test02 {
public static void main(String[] args) {
// StringBuilder是直接改数组
// StringBuilder调的时候没有对象锁不需要等待
// synchronized 同步
// 如果调用synchronized就必须有对象锁
StringBuilder sb = new StringBuilder("abcdefghigklmnopqrstuvwxyz");
// 从0开始包3不包5 delete 删除 包头不包未 可以写这样的方法链
sb.delete(3, 5).delete(3,5);  //结果:abchigklmnopqrstuvwxyz
System.out.println(sb);
// reverse() 翻转
sb.reverse();
System.out.println(sb);
// StringBuffer调的时候有对象锁需要等待
StringBuffer sb2= new StringBuffer();
}
}

标签:sb2,JDK,StringBuilder,源码,数组,长度,new,append
来源: https://www.cnblogs.com/fantasticDream/p/16386332.html