ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-17 17:05:38  阅读:138  来源: 互联网

标签:sb2 JDK StringBuilder 源码 数组 长度 new append


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有