wordpress怎样搭建网站,网站怎么查哪家公司做的,做网站导航,海南省城乡与住房建设厅网站目录 一、StringBuffer二、StringBuilder三、总结 一、StringBuffer
StringBuffer是一个可变的字符序列#xff0c;它的存在是为了解决频繁操作字符串时产生大量临时对象的问题。 构造方法#xff1a; StringBuffer()#xff1a;创建一个空的字符串缓冲区#xff0c;初始容… 目录 一、StringBuffer二、StringBuilder三、总结 一、StringBuffer
StringBuffer是一个可变的字符序列它的存在是为了解决频繁操作字符串时产生大量临时对象的问题。 构造方法 StringBuffer()创建一个空的字符串缓冲区初始容量为 16 个字符。StringBuffer(int capacity)创建一个空的字符串缓冲区具有指定的初始容量。StringBuffer(String str)创建一个字符串缓冲区并将其初始内容设置为指定的字符串。 常用方法 append()将指定的参数追加到字符串缓冲区的末尾。可以接受各种数据类型的参数如基本数据类型、字符串、对象等。例如StringBuffer sb new StringBuffer(Hello);
sb.append( World!);
System.out.println(sb); // 输出Hello World!insert()在指定位置插入指定的参数。例如StringBuffer sb new StringBuffer(Hello);
sb.insert(2, abc);
System.out.println(sb); // 输出Heabcllodelete()删除指定范围内的字符。例如StringBuffer sb new StringBuffer(Hello World!);
sb.delete(5, 11);//左闭右开
System.out.println(sb); // 输出Hello!reverse()将字符串缓冲区中的字符序列反转。例如StringBuffer sb new StringBuffer(Hello);
sb.reverse();
System.out.println(sb); // 输出olleHlength()返回字符串缓冲区的长度。capacity()返回当前字符串缓冲区的容量。如果需要的字符数量超过当前容量StringBuffer会自动增加容量。 线程安全性
StringBuffer是线程安全的这意味着多个线程可以同时访问和操作同一个StringBuffer对象而不会出现数据不一致的情况。这是通过在方法上进行同步实现的。例如
class ThreadSafeExample {public static void main(String[] args) {// 创建一个空的 StringBuffer 对象 sharedBufferStringBuffer sharedBuffer new StringBuffer();// 创建第一个线程 thread1Thread thread1 new Thread(() - {// 在这个线程中循环 1000 次向 sharedBuffer 中追加字符Afor (int i 0; i 1000; i) {sharedBuffer.append(A);}});// 创建第二个线程 thread2Thread thread2 new Thread(() - {// 在这个线程中循环 1000 次向 sharedBuffer 中追加字符Bfor (int i 0; i 1000; i) {sharedBuffer.append(B);}});// 启动第一个线程thread1.start();// 启动第二个线程thread2.start();try {// 等待第一个线程执行完毕thread1.join();// 等待第二个线程执行完毕thread2.join();} catch (InterruptedException e) {// 如果在等待过程中被中断打印异常信息e.printStackTrace();}// 输出 sharedBuffer 的长度System.out.println(sharedBuffer.length());}
}这段代码创建了两个线程分别向同一个StringBuffer对象中追加不同的字符。通过使用join()方法确保主线程等待两个子线程执行完毕后再输出StringBuffer的长度。
适用场景
当需要在多线程环境下操作字符串时StringBuffer是一个合适的选择。例如在一个多线程的服务器应用程序中多个线程可能需要同时构建一个响应字符串这时使用StringBuffer可以确保数据的一致性。
二、StringBuilder
StringBuilder与StringBuffer类似也是一个可变的字符序列但它是非线程安全的。 构造方法 StringBuilder()创建一个空的字符串生成器初始容量为 16 个字符。StringBuilder(int capacity)创建一个空的字符串生成器具有指定的初始容量。StringBuilder(String str)创建一个字符串生成器并将其初始内容设置为指定的字符串。 常用方法
与StringBuffer的方法基本相同包括append()、insert()、delete()、reverse()等。例如
StringBuilder sb new StringBuilder(Hello);
sb.append( World!);
System.out.println(sb); // 输出Hello World!性能优势
由于StringBuilder不需要进行线程同步所以在单线程环境下它的性能通常比StringBuffer更高。例如
// 获取当前系统时间以毫秒为单位用于记录开始时间
long startTime System.currentTimeMillis();
// 创建一个 StringBuilder 对象
StringBuilder sb new StringBuilder();
// 循环 100000 次
for (int i 0; i 100000; i) {// 将循环变量 i 追加到 StringBuilder 对象 sb 中sb.append(i);
}
// 再次获取当前系统时间计算从开始到现在经过的时间并打印使用 StringBuilder 的操作时间
System.out.println(StringBuilder time: (System.currentTimeMillis() - startTime));// 再次获取当前系统时间以毫秒为单位用于记录新的开始时间
startTime System.currentTimeMillis();
// 创建一个 StringBuffer 对象
StringBuffer sbf new StringBuffer();
// 循环 100000 次
for (int i 0; i 100000; i) {// 将循环变量 i 追加到 StringBuffer 对象 sbf 中sbf.append(i);
}
// 再次获取当前系统时间计算从这个新的开始时间到现在经过的时间并打印使用 StringBuffer 的操作时间
System.out.println(StringBuffer time: (System.currentTimeMillis() - startTime));分别使用StringBuilder和StringBuffer进行大量的字符串拼接操作可以看到StringBuilder的执行时间通常更短。
适用场景
在单线程环境下当需要高效地操作字符串时StringBuilder是一个很好的选择。例如在一个桌面应用程序中只有一个主线程在操作字符串这时使用StringBuilder可以提高性能。
三、总结
StringBuffer和StringBuilder都是 Java 中用于操作可变字符串的工具类。它们的主要区别在于线程安全性和性能。StringBuffer是线程安全的但性能相对较低StringBuilder是非线程安全的但在单线程环境下性能更高。在选择使用哪个类时需要根据具体的应用场景来决定。如果是在多线程环境下操作字符串应该使用StringBuffer如果是在单线程环境下为了获得更好的性能可以选择使用StringBuilder。