java.lang.StringBuilder和java.lang.StringBuffer (JDK1.8)详解编程语言
前者用于存储字符串,后者用于统计实际使用了多少位,也就是实际存入字符串长度。当new一个StringBuilder或者StringBuffer的时候,默认capacity为16,也即声明出一个16大小的字符数组,此时count=0,value.length=16。
1 public StringBuilder() // 初始char[]长度为16 2 public StringBuffer() // 初始char[]长度为16 4 public StringBuilder(String str) // 初始char[]长度为str.length+16 5 public StringBuffer(String str) // 初始char[]长度为str.length+16
在StringBuilder中基本上自身并没有重新定义什么方法,都是通过super调用的父类AbstractStringBuilder中定义的方法。
在StringBuffer中情况类似,基本上也没有重新定义什么方法,也都是调用父类AbstractStringBuilder中的方法,不过调用的时候方法都是加上了synchronzied,增加了同步锁保证线程安全。在方法前面加上synchronized作用对象是调用该方法的对象实例。
此外StringBuffer中增加了一个私有成员变量:
1 private transient char[] toStringCache
transient短暂的意思,是个关键字,用它声明的实例变量,其值不需要维持,换言之序列化的时候不会参与序列化过程。
// StringBuilder public String toString() { // Create a copy, dont share the array return new String(value, 0, count); // StringBuffer public synchronized String toString() { if (toStringCache == null) { toStringCache = Arrays.copyOfRange(value, 0, count); return new String(toStringCache, true); }
在toString方法中,StringBuffer是将内容拷贝到toStringCache,然后再构造String。toStringCache在任何修改都会被清空置为null。在字符数组未被修改的情况下,下次再调用toString则可以直接使用缓存去构造字符串了。
下面直接看下AbstractStringBuilder类的方法。
1 public void ensureCapacity(int minimumCapacity)
该方法用于扩大value的容量,minimumCapacity如果大于value.length则newCapacity = max{value.length*2 + 2, minimumCapacity},如果newCapcity MAX_ARRAY_SIZE则最终的capacity = max{minimumCapacity, MAX_ARRAY_SIZE}。其中MAX_ARRAY_SIZE = Integer.MAX_VALUE 8 。
在类中定义了各种append方法,如果append方法的参数为null的时候,append结果是将“null”字符串加到现有字符数组后面,而不是什么都不加。如果append(boolean),则是将“true”或者“false”添加到现有字符数组的最后。
AbstractStringBuilder主要定义的是各种append和insert方法。难度都不大,这里不赘述了~~
11355.html
cjava相关文章
- java实现ajax_Ajax&Java
- Java String字符串补0或空格详解编程语言
- java实现鼠标和键盘动作后台监听详解编程语言
- MQ接收队列到本地文件的Java代码详解编程语言
- Java实现Grep详解编程语言
- java读取csv文件详解编程语言
- java连接mysql数据库示例详解编程语言
- java将html转换为纯文本的代码详解编程语言
- 数据库字段名称转java字段名称详解编程语言
- 圣诞节为大家推荐一些学习java书籍详解编程语言
- java基础学习总结——开篇详解编程语言
- 115道Java经典面试题(面中率最高、最全)详解编程语言
- JAVA操作文件总结详解编程语言
- java中的split函数用法详解编程语言
- 银联二维码支付java 实现详解编程语言
- Java数据结构和算法(十二)——2-3-4树详解编程语言
- Redis集群集成Spring在Java中的使用详解编程语言
- Java中Date日期字符串格式的各种转换详解编程语言
- Java 命令行解析器 JOpt Simple详解编程语言
- java数组转换为List注意地方详解编程语言
- java 反射机制详解编程语言
- Java类(继承)初始化顺序详解编程语言
- java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)详解编程语言
- JSTATD结合Java VisualVM进行远程监控JVM运行情况详解编程语言
- Jsp获取Java的对象(JavaBean)详解编程语言
- java时间工具类详解编程语言
- JAVA 获取网页源代码保存到本地文件详解编程语言
- Java 虚拟机总结 – JVM 内存区域详解编程语言
- 【Java】IO、NIO详解编程语言
- Java多线程4:synchronized锁机制详解编程语言
- 利用Redis锁实现Java程序并发控制(redis锁java实现)