StringBuffer是一个容器,代表可变的字符序列,可以对字符串内容进行增删。
StringBuffer是可变长度的。
实现了序列化接口,可实现串行化(可以将内容保存至文件或者网络传输): Serializable
在父类 AbstractStringBuilder 中,有属性:byte[] value; 不是final。
注意:数组存放在堆中,而不是在常量池里面了。
【 java 常用类】StringBuffer 源码分析以及 StringBuffer 底层的数组扩容机制_stringbuffer扩容机制_馆主阿牛的博客-CSDN博客
1、String保存的是字符串常量,里面的值不能修改,每次String类的更新实际上是更新地址,效率低
2、StringBuffer保存的是字符串变量,里面的值可以更改,每次的更新不用更改地址,效率高
2、通过构造器指定 char[] 大小
StringBuffer stringBuffer1 = new StringBuffer(100);
3、通过 给一个String 创建 StringBuffer, char[] 大小就是 str.length() + 16
StringBuffer hello = new StringBuffer(“hello”);
String——>StringBuffer:
String str = "hello tom";
方式1 使用构造器
//注意: 返回的才是StringBuffer对象,对str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用的是append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
StringBuffer ->String
StringBuffer stringBuffer3 = new StringBuffer("韩顺平教育");
//方式1 使用StringBuffer提供的 toString方法
String s = stringBuffer3.toString();
//方式2: 使用构造器来搞定
String s1 = new String(stringBuffer3);
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');// "hello,"
s.append("张三丰");//"hello,张三丰"
s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
System.out.println(s);//"hello,张三丰赵敏100true10.5"
// 删除
// 删除索引为>=start &&
public class StringBufferExercise01 {
public static void main(String[] args) {
String name = null;
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(name);
// 输出为 4
System.out.println(stringBuffer.length());
// 构造方法中传null,报 NullPointerException
StringBuffer stringBuffer1 = new StringBuffer(name);
System.out.println(stringBuffer1);
}
}
第二题:
String s = new String("12.343");
StringBuffer stringBuffer = new StringBuffer(s);
for (int i = s.lastIndexOf(".") - 3; i > 0; i-=3 ){
stringBuffer.insert(i, ",");
}
System.out.println(stringBuffer);
1、一个可变的字符序列,此类提供一个与StringBuffer兼容的API,注意,方法也不是完全一致(StringBuilder不支持线程安全,即在多线程中使用会不安全)。
该类的设计目的为StringBuffer的一个简易替换,**用在字符串缓冲区被单个线程使用的时候,**如果可以的话,建议优先采用该类,因为在大多数情况下,它要比StringBuffer快的多
2、在StringBuilder上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。
3、Serializable接口:表示可以串行化,数据可以进行网络传输或者保存至文件。
4、StringBuilder继承了AbstractStringBuilder 类,跟StringBuffer一样,数据放在 char[] value; 中
5、final类,不可以被继承
6、StringBuilder的方法中,没有做互斥的处理,即没有synchronized关键字。