对StringBuilder的理解
来源:互联网 发布:手机淘宝卖家联系方式 编辑:程序博客网 时间:2024/06/06 09:23
前段时间听领导说他面试了一个工作了5年的java程序员,被问到StringBuilder是怎么实现字符串长度的变化的,把别人问的蒙住了。忙完了手上的事情,来回忆一下,虽然平时用到的机会不是很多,但是这些基础的只是还是不能被遗忘掉的。
先上一段测试代码
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); // 创建一个字符串生成器
sb.append("dce");// 给字符串生成器中追加字符串
sb.insert(1, "ab");//给字符串生成器中指定位置插入字符串
System.out.println(sb.toString());
}
这段代码大家都不陌生,学过java的人会很容易写出来。
StringBuilder 是一个可变的字符序列,用在字符串缓冲区被单个线程使用的时候。
其主要的使用方法是如上述代码中的append和insert。这两个方法都是可以被重载的,参数可以是任何类型。每个方法都可以将给定的数据转换成字符串,然后将该字符串字符追加或者插入到字符串生成器中。append方法始终将字符添加到生成器的最末端,而insert方法则在指定的点添加字符。
每个字符串生成器都是有一定的容量的,只要字符串生成器所包含的字符序列的长度没有超出此容量,就没有必要再分配新的缓冲区。如果生成器内部的缓冲区溢出,则此容量自动增大。
通过上面的描述,我们很清楚就明白了。StringBuilder使用时,首先会创建一个一定容量的字符串生成器,然后通过append和insert方法来增加字符串生成器中字符串的长度。
当然会有同学问了,append和insert实现了字符串生成器中字符串长度的增加,怎么减少字符串的长度呢?是的,StringBuilder也有delete方法。delete(int start,int end),两个参数分别是删除字符串生成器中字符串的起始位置和结束为止。
接着上面的代码再补充一段:
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("dce");
sb.insert(1, "ab");
System.out.println(sb.toString());
sb.delete(0, 2);
System.out.println(sb.toString());
}
输出结果不出大家所料:
dabce
bce
将StringBuilder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。
- 对StringBuilder的理解
- String、StringBuffer、StringBuilder以及对String不变性的理解
- java 的String, Stringbuffer, StringBuilder的区别以及对final关键字的理解
- StringBuilder 和StringBuffer的理解
- String、StringBuilder和StringBuffer的一些理解
- Java中String、StringBuilder、 StringBuffer的理解
- CharSequence & String & StringBuilder & StringBuffer的简单理解
- 关于String,StringBuffer,StringBuilder的理解
- java编译器对代码的优化-StringBuilder
- 对StringBuilder抛出ArrayIndexOutOfBoundsException的探究
- 对博客的理解
- 对动力的理解
- 对类的理解
- 对package的理解
- 对IRP的理解
- 对接口的理解
- 对String的理解
- 对https的理解
- NO.4 linux系统分区及文件系统
- This和Super关键字
- ios 上架流程
- 《类型编程晋级——shapeless类库使用指南》前言及第一章翻译
- 记录开发小知识-java后台
- 对StringBuilder的理解
- unity学习开始篇
- 1127. ZigZagging on a Tree (30)
- 底部菜单栏(一) TabHost实现
- 理解Java对象序列化及其高级应用
- BeanUtils.copyProperties() 拷贝对象属性时,日期为空的处理
- python学习笔记
- 遇到问题----java---多线程----线程数一直增加----web项目中线程池的正确使用方式
- 联想键盘F1-F12的切换