零基础学JAVA--Day29( StringBuffer+ StringBuilder)
String类常用方法
String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强String的功能,并提高效率。
StringBuffer
1、java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
2、很多方法与String相同,但StringBuffer是可变长度的。
3、StringBuffer是一个容器。
1、StringBuffer的直接父类是AbstractStringBuilder
2、StringBuffer实现了Serializable,即StringBuffer的对象可以串行化
3、在父类中AbstractStringBuilder有属性char[ ]value,不是final类该value数组存放字符串内容,因此是存放在堆中的
4、StringBuffer是一个final类,不能被继承
String VS StringBuffer
1)String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低//private final char value[ ];
2)StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,有自己的扩容机制,效率较高//char [ ] value;//这个放在堆
StringBuffer构造器
构造方法摘要
1、StringBuffer()<-----------常用
构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。
2、StringBuffer(CharSequence seq)
publicJava.lang.StringBuilder(CharSequence seq)构造一个字符串缓冲区,它包含与指定的
CharSequence相同的字符。
3、StringBuffer(int capacity) //capacity [容量]<-----------常用
构造一个不带字符,但具有指定初始容量的字符串缓冲区。即对char [ ]大小进行指定
4、StringBuffer(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。大小就是str.length()+16
String和StringBuffer相互转化
//String----->StringBuffer
String str = "aaa";
//方式1 使用构造器
//注意:返回的才是StringBuffer对象,对str本身没有影响
StringBuffer stringBuffer new StringBuffer(str);//方式2使用的是append方法
StringBuffer stringBuffer1=new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);//StringBuffer->String
StringBuffer stringBuffer3 = new StringBuffer("bbb");//方式1:使用StringBuffer提供的toString方法
String s = stringBuffer3.toString();//方式2:使用构造器来搞定
String s1 = new String(stringBuffer3);
StringBuffer类常用方法
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');//"hello, "
s.append("张三丰");//"hello,张三丰"//删
/**删除索引为>=start&&<end处的字符删除11-14(不包含14)的字符[11.14)
*/
s.delete(11,14);//改
//使用周芷若替换索引9-11的字符 [9.11)
s.replace(9,11,"周芷若");//插入
//在索引为9的位置插入“赵敏”,原来索引为9的内容自动后移
s.insert(9,"赵敏");//查找指定的子串在字符串 第一个字符 第一次 出现的索引,如果找不返回-1
intindexOf=s.indexOf("张三丰");//长度
System.out.println(s.length());
StringBuilder类
1)一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(不保证线程安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。
2)在StringBuilder上的主要操作是append和 insert方法,可重载这些方法,以接受任意类型的数据。
//1。StringBuilder继承AbstractStringBuilder类
//2。实现了Serializable,说明stringBuilder对象是可以串行化(对象可以网络传输,可以保持到文件
//3。StringBuilder是final类,不能被继承
//4。StringBuilder对象字符序列仍然是存放在其父类AbstractStringBuilder的char[]value;因此,字符序列是堆中
//5。StringBuilder的方法,没有做互斥的处理,即没有synchronized
StringBuilder stringBuilder = new StringBuilder();
String、StringBuffer 和StringBuilder的比较
1)StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
2)String:不可变字符序列,效率低,但是复用率高。
3)StringBuffer:可变字符序列、效率较高(增删)、线程安全
4)StringBuilder:可变字符序列、效率最高、线程不安全
5)String使用注意说明:
string s =" a ";//创建了一个字符串
s + = “b";
/*实际上原来的”a“字符串对象已经丢弃了,现在又产生了一个字符串s+“b”(也就是”ab)。
如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。
如果这样的操作放到循环中,会极大影响程序的性能
*/=>结论:如果我们对String做大量修改,不要使用String
String、StringBuffer 和StringBuilder的选择
使用的原则,结论:
1.如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder
2.如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
3.如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等
StringBuilder的方法使用和 StringBuffer一样,不再说.
————————————————————————————————————
Day29 End
离回家还有60天~
