版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18948359/article/details/85132625
String 类特点回顾
String 类的特点:
- String 类的两种实例化方式:
- 直接赋值:只开辟一块堆内存空间,可以自动入池。
- 构造方法:开辟两块堆内存空间,不会自动入池,使用 intern() 手工入池。
- 任何一个字符串都是 String 类的匿名对象
- 字符串一但声明则不可改变,可以改变的只是 String 类对象的引用。
由于String 类不可以改变的特点,在 Java 中定义了 StringBuffer 类才处理。StringBuffer 类使用 append() 方法进行追加。
StringBuffer 使用
public class TestDemo {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append("Hello").append("\t").append("World");
// 输出结果:Hello World
System.out.println(buf);
}
}
StringBuffer 与 String 的相互转换
public class StringBufferTest {
public static void main(String[] args) {
/** String 转 StringBuffet **/
// 使用构造器
StringBuffer buf = new StringBuffer("Hello World!");
System.out.println(buf);
// append()方法
StringBuffer buf1 = new StringBuffer("Hello");
buf.append("\tJava");
System.out.println(buf1);
/** StringBuffet 转 String **/
// 使用 toString() 方法
StringBuffer buf2 = new StringBuffer("Hello");
String str = buf2.toString();
System.out.println(str);
}
}
StringBuilder 类
StringBuilder 类是从 JDK 1.5 之后新加入的字符串操作类。而我们的 String 与 StringBuffer 是在JDK 1.0 中就存在的。StringBuilder官方链接中可以看到,StringBuffer 与 StringBuilder 类在定义上面特别相似,几乎连方法都一样。
在源码上面,我们可以看到在 StringBuffer 的方法上面加上有 synchronized
关键字,也就说 StringBuffer 是线程同步的。
public synchronized StringBuffer append(StringBuffer sb) {
toStringCache = null;
super.append(sb);
return this;
}
String、StringBuffer、StringBuilder 的区别如下:
- String 的内容一旦声明则不可以改变,而 StringBuffer 与 StringBuilder 声明的内容是可以改变的。
- StringBuffer类中提供的方法都是同步方法,属于安全的线程操作,而 StringBuilder 类中的方法都属于异步方法啊,属于非线程安全的方法。
StringBuffer 的常用操作
前面介绍了 StringBuffer,现在介绍下,StringBuffer 常用的操作方法。
StringBuffer 比较的方法
比较的方法:public boolean contentEquals(StringBuffer sb);
public class Demo {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer("Hello");
System.out.println("Hello".contentEquals(buf)); // true
}
}
StringBuffer 字符串反转
字符串反转:public StringBuffer reverse();
public class StringBufferTest {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer("Hello");
System.out.println(buf.reverse()); // olleH
}
}
StringBuffer 指定位置添加数据
指定位置添加数据:public StringBuffered insert(int index,数据类型 变量)
public class StringBufferTest {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer("Hello");
buf.insert(5, " world!").insert(0, "测试学习!");
System.out.println(buf); //测试学习!Hello world!
}
}
StringBuffer 删除部分数据
删除部分数据: public StringBuffer delete(int start ,int end)
public class StringBufferTest {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer("Hello World");
// 注意:输出是有空格的
System.out.println(buf.delete(0, 5)); // World
}
}