一、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相关推荐

  1. Java:代码验证 StringBuffer 线程安全,StringBuilder 非线程安全

    首先需要明白什么是线程安全,什么是非线程安全,引用百度百科  关于 Java 中 String,StringBuffer 和 StringBuilder 的区别,参看:  Java:String,St ...

  2. Java中String、StringBuffer、StringBuilder的区别

    Java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  3. java替换特殊字符_Java StringBuffer替换特殊字符

    在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的"."和全角状态下的" ...

  4. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  5. Java 集合 --- String, StringBuilder, StringBuffer

    Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...

  6. Java中String,StringBuffer都是final类

    Java中String和StringBuffer同时final类,它们的区别在哪里 ? final 表示这个类不能再被继承.String不可变是说String中用一个final 的char数组priv ...

  7. java中拼接和 的区别_浅析Java中String与StringBuffer拼接的区别

    学习笔记: 1.String拼接会创建一个新的String对象,存储拼接后的字符串: StringBuffer拼接是直接在本身拼接,会即时刷新. 2.String只能拼接String类型的字符串: S ...

  8. JAVA中String、StringBuffer和StringBuider类

    String String类的继承关系图: 基本介绍: String对象用于保存字符串,也就是一组字符序列 字符串常量对象是用双引号括起的字符序列.例如:"你好","ha ...

  9. JAVA中String与StringBuffer 、StringBuilder的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

最新文章

  1. emmet快速缩写展开的基本写法与心得
  2. vue 请求多个api_Vue 创建多人共享博客
  3. Flowable V5.x迁移至Flowable V6时需要注意的事项
  4. QT的QMaterial类的使用
  5. mysql manage keys_相传mysql 5.5 对于非聚集索引增删有很大的改善… 你信吗?
  6. mysql ddl 失败_PHP加载mysql DDL会失败
  7. 小问题420_1_hibernateTemplate.update不执行
  8. C++多线程Demo
  9. Pytorch/Caffe可以先转换为ONNX,再转换为TensorRT
  10. 基于python的新闻发布系统
  11. MySQL 管理之道读书总结
  12. 2018年列车已到站,请您下车
  13. 千万别再乱点黄色APP了!
  14. 怎样成为一个高级JAVA工程师
  15. LibOpenCM3(一) Linux下命令行开发环境配置
  16. [转]把自己从一个疯狂下载者变成一个学习者
  17. 基于51单片机智能停车场管理车位引导系统蓝牙手机通信proteus仿真原理图PCB
  18. YUV420P,YUV420,YUV420SP区别
  19. 多目标跟踪文献阅读笔记
  20. 隐私保护集合求交技术 (PSI)

热门文章

  1. [数据结构-严蔚敏版]P46栈的顺序存储表示
  2. [JavaWeb-Servlet]IDEA与Tomcat的相关配置
  3. 2021中考高考成绩查询,2021中考
  4. word List 46
  5. 进程调度算法 C++实现
  6. Function!(计蒜客 - 42386)
  7. CF1497E2 Square-free division (hard version)
  8. C - Cats Gym - 102875C
  9. 2020 CCPC网络赛 赛后感
  10. P3239 [HNOI2015]亚瑟王(期望)