目录
1.2 StringBuilder 类中 append()方法
1.3 StringBuilder 类中 reverse() 方法
1.4 StringBuilder 类中 length() 方法
1.5 StringBuilder 类中 toString() 方法
1.6 为什么操作字符串的建议使用 StringBuilder 类型 ,而不建议 String 类型?
1.7 StringBuilder 与 StringBuffer 比较
API
1.0 StringBuilder 类概念
StringBuilder 代表可变字符串对象,相当于一个容器,它装的字符串是可以改变的,就是用来操作字符串的。
对比与一般的 String 类 会更加好操作字符串,因为用String 类型的字符串是不可变的,而 StringBuilder 类型的字符串是可以改变的。
1.1StringBuilder 类中构造器
可以通过两种形式来创建 StringBuilder 类型的对象;分别是有参数构造器和无参数构造器。
代码如下:
public class StringBuilderAppend { public static void main(String[] args) { //根据无参数构造器来创建对象,代表一开始就是空字符串“” StringBuilder stringBuilder1 = new StringBuilder(); System.out.println(stringBuilder1); //根据有参数构造器来创建对象,代表一开始就是有自定义的字符串 String str = "lisi"; StringBuilder stringBuilder2 = new StringBuilder(str); System.out.println(stringBuilder2); } }
1.2 StringBuilder 类中 append()方法
添加数据任何数据并返回StringBuilder 类型对象本身。
代码如下:
public class StringBuilderAppend { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(11); stringBuilder.append(2.2); stringBuilder.append('a'); stringBuilder.append("lisi"); System.out.println(stringBuilder); }
输出结果:
需要注意的是,每次添加完数据之后,返回来的是对象本身,不会创建新的对象。
1.3 StringBuilder 类中 reverse() 方法
将对象的内容反转。
代码如下:
public class StringBuilderAppend { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(11); stringBuilder.append(2.2); stringBuilder.append('a'); stringBuilder.append("lisi"); System.out.println(stringBuilder); stringBuilder.reverse(); System.out.println(stringBuilder); }
运行结果如下:
同样需要注意的是,反转回来的也是对象本身,不会创建新的对象。
1.4 StringBuilder 类中 length() 方法
返回对象的长度。
代码如下:
public class StringBuilderAppend { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(11); stringBuilder.append(2.2); stringBuilder.append('a'); stringBuilder.append("lisi"); System.out.println(stringBuilder); stringBuilder.reverse(); System.out.println(stringBuilder); //返回字符串个数 System.out.println(stringBuilder.length()); }
运行结果如下:
1.5 StringBuilder 类中 toString() 方法
将 StringBuilder 类型的对象转变为 String 类型的对象。
代码如下:
public class StringBuilderAppend { public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(11); stringBuilder.append(2.2); stringBuilder.append('a'); stringBuilder.append("lisi"); System.out.println(stringBuilder); stringBuilder.reverse(); System.out.println(stringBuilder); System.out.println(stringBuilder.length()); String s = stringBuilder.toString(); //先是 stringBuilder类 去调用静态 toString() 方法 //然后得到一个 toString 类型的字符串 ,然后用String 类型的变量 s 来接收 System.out.println(s.toString()); //然后s 对象去调用已经重写Object 中的toString() 方法 //最后输出内容:”isila2.211“ 这个字符串是不可以改变的 }
运行结果如下:
1.6 为什么操作字符串的建议使用 StringBuilder 类型 ,而不建议 String 类型?
最本质的原因就是,StringBuilder 类型的字符串 对字符串操作之后都会返回对象本身,不会创建新的对象,而 String 类型的字符串 每一次对字符串操作之后都会在栈区上 new 一个新的 String 类型的对象,所以操作 String 类型的字符串 的效率不如操作 StringBuilder 类型的字符串。
举个例子来观察一下:
代码如下:
public class StringBuilderAppend { public static void main(String[] args) { String str = ""; int n = 10000000; for (int i = 0; i < n; i++) { str += "lisi"; } System.out.println(str); }
public class StringBuilderAppend { public static void main(String[] args) { StringBuilder str = new StringBuilder(); int n = 10000000; for (int i = 0; i < n; i++) { str.append("lisi"); } System.out.println(str); }
这两个代码,都可以在你的电脑去运行一下,看看第一个代码直到运行结束需要多长时间,而第二个代码几乎是眨几下眼的功夫就运行结束了。
1.7 StringBuilder 与 StringBuffer 比较
StringBuffer 类中的API 与 StringBuilder 类API 用法是一摸一样的。StringBuffer 类和 StringBuilder 类都是可变字符串类,它们的用途是为了处理字符串的拼接和修改操作。
StringBuffer 类是线程安全的,可以被多个线程同时访问和修改,但是性能相对较低。它的方法都是同步的,也就是说在多线程环境下,每个方法都会被锁住,保证线程安全。
StringBuilder 类是线程不安全的,只能被单个线程访问和修改,但是性能相对较高。它的方法没有进行同步,所以在单线程环境下可以获得更好的性能。
两者的使用方法几乎完全相同,都提供了一系列的方法用于字符串的操作,例如拼接、插入、删除、替换等。区别在于线程安全性和性能。如果在多线程环境下需要进行字符串操作,应该使用 StringBuffer 类;如果在单线程环境下需要进行字符串操作,可以使用 StringBuilder 类来获得更好的性能。