java之StringBuider与StringBuffer
一、StringBuider与StringBuffer
StringBuider与StringBuffer类比String更加灵活,只要使用字符串的地方,都可以使用StringBuider与StringBuffer类。三者的共同之处都是 final 类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用。
二、StringBuider
1)构造方法
StringBuider() 构建容量为16的空字符串构建器
StringBuider(int capacity) 构建指定容量的构建器
StringBuider(String s) 构建指定字符串的构建器
2)普通方法
append(char[] data) StringBuider //追加字符数组到构造器
append(char[] data, int offset, int len) StringBuider //追加data的之数组到构造器
append(aPrimitveType v) StringBuider //将基本类型作为字符串追加到字符串构造器
append(String s) StringBuider //追加一个字符串到字符串构造器
delete(int startIndex, int endIndex) StringBuider //删除从startIndex到endIndex-1的字符
deleteCharAt(int index) StringBuider //删除指定索引位置的字符
insert(int index,char[] data, int offset,int len) StringBuider //指定索引插入数组data的之数组到构造器
insert(int offset, char[] data) StringBuider //向构造器的偏移位置插入data数组
insert(int offset, aPrimitveType v) StringBuider //向构造器的偏移位置插入一个转换为字符串的数值
replace(int startIndex, int endIndex, String s) StringBuider //从startIndex到endIndex-1的位置的字符替换为指定的字符串
reverse() StringBuider //倒置构建器的字符串
setCharAt(int index, char ch) void //将索引的字符更新为新字符
以上的返回值都是该对象本身的引用。
实例:
StringBuilder stringBuilder=new StringBuilder();stringBuilder.append("a");stringBuilder.append('a');stringBuilder.delete(0, 2);stringBuilder.reverse();stringBuilder.insert(stringBuilder.length()-1, "e");
3)其他方法
charAt(int index) char //获取指定索引的字符
toString() String
capacity() int //返回构造器的容量
length() int //字符串构建器的实际长度
setLength(int newLength) //设置构建器的新字符数
substring(int startIndex) String //返回从startIndex的子字符串
substring(int startIndex, int endIndex) String //返回从startIndex到endIndex的子字符串
trimToSize() //减少字符串构建器的存储大小
setLength(int newLength) 方法设置字符串的构建长度,如果newLength大于等于当前的长度,则字符串构建器会自动追加足够的空字符('\u0000'),使其长度length变成newLength,如果newLength小于字符串构建器的长度,则字符串构建器会被截取到恰好等于newLength的个数。newLength必须大于等于0。
trimToSize()方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
三、StringBuffer
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 与StringBuilder 相似,主要操作有 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端,而 insert 方法则在指定的点添加字符。
四、String、StringBuffer 与 StringBuilder
1) String类是final类,String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。在早期的JVM实现版本中,被final修饰的方法会被转为内嵌调用以提升执行效率。而从Java SE5/6开始,就渐渐摈弃这种方式了。因此在现在的Java SE版本中,不需要考虑用final去提升方法调用效率。只有在确定不想让该方法被覆盖时,才将方法设置为final。
2) StringBuffer 与 StringBuilder 功能相似,只是 StringBuffer 是线程安全,可以不需要额外的同步用于多线程中。StringBuilder 是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比 StringBuffer 快。二者之间的共同点都可以通过append、insert进行字符串的操作。
3) String 实现了三个接口:Serializable、Comparable<String>、CharSequence,而 StringBuffer 及 StringBuilder 只实现了两个接口Serializable、CharSequence,相比之下 String 的实例可以通过 compareTo 方法进行比较,而其它两个就不可以。
4) 对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder类在Java 5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
5) String对于直接相加字符串,效率很高,在编译器便确定了它的值。对于间接相加(即包含字符串引用),效率要比直接相加低,因为在编译器不会对引用变量进行优化。
6) String、StringBuilder、StringBuffer三者在修改下的执行效率:
StringBuilder > StringBuffer > String
字符串相加操作或者改动较少的情况下,建议使用 String。字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer。
java之StringBuider与StringBuffer相关推荐
- Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全
首先需要明白什么是线程安全,什么是非线程安全,引用百度百科 关于 Java 中 String,StringBuffer 和 StringBuilder 的区别,参看: Java:String,St ...
- Java中String、StringBuffer、StringBuilder的区别
Java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- java替换特殊字符_Java StringBuffer替换特殊字符
在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的"."和全角状态下的" ...
- Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...
- Java 集合 --- String, StringBuilder, StringBuffer
Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...
- Java中String,StringBuffer都是final类
Java中String和StringBuffer同时final类,它们的区别在哪里 ? final 表示这个类不能再被继承.String不可变是说String中用一个final 的char数组priv ...
- java中拼接和 的区别_浅析Java中String与StringBuffer拼接的区别
学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: S ...
- JAVA中String、StringBuffer和StringBuider类
String String类的继承关系图: 基本介绍: String对象用于保存字符串,也就是一组字符序列 字符串常量对象是用双引号括起的字符序列.例如:"你好","ha ...
- JAVA中String与StringBuffer 、StringBuilder的区别
String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...
最新文章
- emmet快速缩写展开的基本写法与心得
- vue 请求多个api_Vue 创建多人共享博客
- Flowable V5.x迁移至Flowable V6时需要注意的事项
- QT的QMaterial类的使用
- mysql manage keys_相传mysql 5.5 对于非聚集索引增删有很大的改善… 你信吗?
- mysql ddl 失败_PHP加载mysql DDL会失败
- 小问题420_1_hibernateTemplate.update不执行
- C++多线程Demo
- Pytorch/Caffe可以先转换为ONNX,再转换为TensorRT
- 基于python的新闻发布系统
- MySQL 管理之道读书总结
- 2018年列车已到站,请您下车
- 千万别再乱点黄色APP了!
- 怎样成为一个高级JAVA工程师
- LibOpenCM3(一) Linux下命令行开发环境配置
- [转]把自己从一个疯狂下载者变成一个学习者
- 基于51单片机智能停车场管理车位引导系统蓝牙手机通信proteus仿真原理图PCB
- YUV420P,YUV420,YUV420SP区别
- 多目标跟踪文献阅读笔记
- 隐私保护集合求交技术 (PSI)
热门文章
- [数据结构-严蔚敏版]P46栈的顺序存储表示
- [JavaWeb-Servlet]IDEA与Tomcat的相关配置
- 2021中考高考成绩查询,2021中考
- word List 46
- 进程调度算法 C++实现
- Function!(计蒜客 - 42386)
- CF1497E2 Square-free division (hard version)
- C - Cats Gym - 102875C
- 2020 CCPC网络赛 赛后感
- P3239 [HNOI2015]亚瑟王(期望)