目录
二,StringBuffer和StringBuilder常用方法
一,定义
1.1,String
对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,因此在线程池中它是线程安全的。因为每一个String当被创建好了以后,他就不再发生任何变化,但是它的执行速度是最差的。
我们要创建String的时候,他在常量池中对这些信息进行处理,如果在程序中出现了大量字符串拼接的工作,效率是非常底下的。
因此使用场景是在少量字符串操作的时候才建议直接使用String来操作。
示例代码:
String str="aaa";
System.out.println(str);
str="bbb";
System.out.println(str);
输出结果:
1.2,StringBuilder
在进行多线程处理的时候,如果多个线程对于这一个对象同时产生操作,会产生预期之外的结果。对于StringBuilder来说,执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作。
因此StringBuilder适用于单线程环境下的大量字符串操作。
String str="aaa"+"bbb";
StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
System.out.println(str);
System.out.println(stringBuilder.toString());
System.out.println(stringBuilder);
输出结果:
1.3,StringBuffer
StringBuffer相对于StringBuilder效率要相对低一点,但也远比String要高的多。效率低的原因:对于StringBuffer来说更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。
因此StringBuffer适用于多线程环境下的大量操作。
1.4,三者区别
String 固定不可变字 符串 | StringBuffer 可变 | StringBuilder 可变 |
String的值是不可变 的,这就导致每次对 String的操作都会生 成新的String对象, 不仅效率低下,而且 浪费大量优先的内存 空间 | StringBuffer是可变类,和线程安全的字符串 操作类,任何对它指向的字符串的操作都不会 产生新的对象。每个StringBuffer对象都有一 定的缓冲区容量,当字符串大小没有超过容量 时,不会分配新的容量,当字符串大小超过容 量时,会自动增加容量 | 可变类,速度 更快 |
不可变 | 可变 | 可变 |
线程安全 | 线程不安全 | |
多线程操作字符串 | 单线程操作字符串 |
二,StringBuffer和StringBuilder常用方法
- public StringBuffer append(String s) 将指定的字符串追加到此字符序列。
- public StringBuffer reverse() 将此字符序列用其反转形式取代。
- public StringBuilder delete(int start, int end) 移除此序列的子字符串中的字符。
- public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。
- insert(int offset, String str) 将 str 参数的字符串插入此序列中。
- replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的 字符。
2.1,append()方法
添加字符串内容;
示例代码:
StringBuilder stringBuilder=new StringBuilder("aaa");
stringBuilder.append("bbb");
System.out.println(stringBuilder);
输出结果:
2.2,delete()方法
删除指定索引内字符串内容;
示例代码:
StringBuilder stringBuilder=new StringBuilder("aabbaa");
stringBuilder.delete(2,4);
System.out.println(stringBuilder);
输出结果:
2.3,insert()方法
在指定索引内添加字符串内容;
示例代码:
StringBuilder stringBuilder=new StringBuilder("aabbaa");
stringBuilder.insert(2,",");
System.out.println(stringBuilder);
输出结果:
2.4,reverse()方法
将字符串进行倒置;
示例代码:
StringBuilder stringBuilder=new StringBuilder("abc");
stringBuilder.reverse();
System.out.println(stringBuilder);
输出结果:
2.5,replace()方法
替换指定索引内字符串内容;
示例代码:
StringBuilder stringBuilder=new StringBuilder("abcde");
stringBuilder.replace(2,4,"k");
System.out.println(stringBuilder);
StringBuilder stringBuilder1=new StringBuilder("abcde");
stringBuilder1.replace(2,2,"k");
System.out.println(stringBuilder1);
输出结果: