StringBuffer 和 StringBiulder的区别

简介:

/**

 * StringBuffer 和 StringBiulder的区别

 * 

 * 说明:String类是不可变类,任何对String的改变都会引发新的String对象的生成;

 *  而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。

 *  既然StringBuffer的性能要优于String,那我们为什么要引入StringBuilder呢??

 * 

 *  那是因为:StringBuffer支持线程同步保证线程安全而导致性能下降。

 *  StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。(可以用下面的例子验证)

 * 

 *  类似的问题还有HashTable和HashMap:

 *  HashTable是线程安全的,很多方法都是synchronized方法,

 *  而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。

 * 

 * ①StringBuffer是线程安全的可变字符序列;而StringBiulder是不安全的;

 * ②由于StringBiulder是线程不安全的,故其效率更快,速度更快

 * 

 * ③StringBuffer常用的方法有两个:append方法始终将字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符

 * ④StringBuilder也有常用的两个方法,和StringBuffer的两个方法用法一样;见下面

 *

 */

//例子一

StringBuffer sb = new StringBuffer();

sb.append("a");

sb.append("b");

sb.append("c");

System.out.println(sb);

 

//例子二,我们给sb赋值的另一种方法

StringBuffer sb1 = new StringBuffer("begin");

sb1.append("-ok-");

sb1.append("-fu-");

System.out.println(sb1);

 

//例子三:insert()方法的使用

StringBuffer sb2 = new StringBuffer("begin");

sb2.insert(3,"-ok-");

System.out.println(sb2);

 

//例子四:测试一下二者的速度;你会发现StringBuilder明显要比StringBuffer的速度要快

long startTime = System.currentTimeMillis();

StringBuilder sbr = new StringBuilder();

for (int i = 0; i < 50000; i++) {

sbr.append("abc");

}

long endTime = System.currentTimeMillis();

System.out.println("StringBuilder耗时:"+(endTime-startTime));

 

 

long startTime1 = System.currentTimeMillis();

StringBuffer sbe = new StringBuffer();

for (int i = 0; i < 50000; i++) {

sbe.append("abc");

}

long endTime1 = System.currentTimeMillis();

System.out.println("StringBuffer耗时:"+(endTime1-startTime1));

 

 

/**

 * :补充知识

 * 

多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线

 

程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源造成的,有时为了解

 

决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲

 

系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制

 

同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求

 

不到,怎么办,A线程只能等待下去

 

异步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程

 

仍然请求的到,A线程无需等待

 

简单一点解释:

1、同步就是说多个任务之间是有先后关系的,一个任务需要等待另一个任务执行完毕才能继续执行。

2、异步就是说多个任务之间没有先后关系,不需要相互等待各做各的事。

 */

 


     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/920851,如需转载请自行联系原作者





相关文章
|
28天前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
3月前
|
安全 Java
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
|
2月前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
42 0
|
4月前
|
Java
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
这篇文章区分了Java中的String和StringBuffer类:String是不可变类,一旦创建字符序列就不能改变;而StringBuffer代表可变的字符串,可以通过其方法修改字符序列,最终可以通过`toString()`方法转换为String对象。
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
|
4月前
|
安全 Java
【Java基础面试二十七】、说一说StringBuffer和StringBuilder有什么区别
这篇文章介绍了Java中StringBuffer和StringBuilder的区别:StringBuffer是线程安全的,而StringBuilder是非线程安全的,因此在单线程环境下优先推荐使用StringBuilder以获得更好的性能。
|
4月前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
4月前
|
安全
String,Stringbuffer,StringBuilder的区别
【8月更文挑战第16天】String,Stringbuffer,StringBuilder的区别
39 2
|
5月前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
6月前
|
安全 Java 测试技术
滚雪球学Java(50):理解Java中String、StringBuilder和StringBuffer的区别与选择
【6月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
44 0
滚雪球学Java(50):理解Java中String、StringBuilder和StringBuffer的区别与选择
|
6月前
|
安全
StringBuffer,StringBuilder的区别及其源码分析
StringBuffer,StringBuilder的区别及其源码分析