Java中的StringBuilder类解析
作者:Neo丶
基本介绍
1)一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单线程使用的时候。如果可能,优先采用该类,因为在大多数实现中,String Builder比StringBuffer要快;
2)在StringBuilder上的主要操作是append()和insert()方法,可重载这些方法,以接受任意类型的数据。
StringBuilder常用方法
与StringBuffer相同,参考StringBuffer类。
1)StringBuilder是final,无法被继承;
2)继承了AbstractStringBuilder类,属性char[] value,内容存放到value中
3)实现了Serializable接口,序列化(可以保存类型和数据本身)。
package com.pero.stringbuilder_; /** * @author Pero * @version 1.0 */ public class StringBuilder01 { public static void main(String[] args) { //1.StringBuilder 继承 AbstractStringBuilder 类 //2.实现了Serializable接口,说明StringBuilder对象是可以串行化的(对象可以网络传输,可以保存到文件) //3.StringBuilder 是final类,不能被继承 //4.StringBuilder 对象的字符序列存放在其父类 AbstractStringBuilder的char[] value; // 因此,字符序列是在堆中的 //5.StringBuilder 的方法,没有做互斥处理,即没有synchronized关键字,因此在单线程的情况下使用StringBuilder StringBuilder stringBuilder = new StringBuilder(); } }
String、StringBuffer和StringBuilder的比较
1)StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
2)String:不可变字符序列,效率低,但复用率高(常量池中的字符串可以被指向多个对象)
3)StringBuffer:可变字符序列,效率高(增删)、线程安全(几乎所有方法都加了synchronized关键字)
4)StringBuilder:可变字符序列,效率最高,但是线程不安全
5)String的使用注意事项:
String s = "a"; //常见一个字符串 s += "b"; //实际上原来的"a"字符串已经被丢弃,产生了一个新的字符串 s + "b"(也就是"ab")
如果多次执行这些改变字符串内容的操作,会导致大量的副本字符串对象存留在内存中,降低效率。
如果这样的操作放到循环中,会极大影响程序的性能=>结论:如果需要对String做大量修改,不要使用Sting类,建议使用StringBuffer和StringBuilder(单线程情况下)类。
package com.pero.stringbuilder_; /** * @author Pero * @version 1.0 */ public class StringBuilder02 { public static void main(String[] args) { String text = ""; long startTime = 0L; long endTime = 0L; StringBuffer stringBuffer = new StringBuffer(""); StringBuilder stringBuilder = new StringBuilder(""); //测试StringBuffer的运行效率 startTime = System.currentTimeMillis(); for (int i = 0; i < 20000; i++) { stringBuffer.append(String.valueOf(i)); } endTime = System.currentTimeMillis(); System.out.println("StringBuffer的执行时间:"+(endTime-startTime)); //测试StringBuilder的运行效率 startTime = System.currentTimeMillis(); for (int i = 0; i < 20000; i++) { stringBuilder.append(String.valueOf(i)); } endTime = System.currentTimeMillis(); System.out.println("StringBuilder的执行时间:"+(endTime-startTime)); //测试String的运行效率 startTime = System.currentTimeMillis(); for (int i=0; i < 20000;i++){ text = text + i; } endTime = System.currentTimeMillis(); System.out.println("String的执行时间:"+(endTime-startTime)); } }
使用原则:
1.如果字符串存在大量的修改操作,一般使用StringBuffer或者StringBuilder;
2.如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder;
3.如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer;
4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等。
StringBuilder的方法使用和StringBuffer一样。
到此这篇关于Java中的StringBuilder类解析的文章就介绍到这了,更多相关Java的StringBuilder类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!