厦门网站制作阳哥,服务器不能访问网站,超市网站建设方案模板,怎么自己做网站qq1#xff0c;String 和 StringBuffer 以及 StringBuilder 的特点
#xff08;1#xff09;String的特点#xff1a;String是final修饰的字符序列是不可改变的#xff0c; 是字符串常量#xff0c;一旦初始化就不可以被更改,因此是线程安全的 因为是常量每次对其操作都会…1String 和 StringBuffer 以及 StringBuilder 的特点
1String的特点String是final修饰的字符序列是不可改变的 是字符串常量一旦初始化就不可以被更改,因此是线程安全的 因为是常量每次对其操作都会生成一个新的字符串对象所以在多线程环境下具有线程安全 的优点但也会导致频繁的对象创建、销毁影响程序性能
2StringBuffer类
StringBuffer产生的原因String类适用于程序中不改变字符的情况,若对字符串的每次修改都创一 个新的 String对象,显然不利于提高程序的效率。Java为了解决这个问题提供了与则String类同 级别的StringBuffer类。
StringBuffer的定义StringBuffer类对象是一个内容可以改变的字符串,修改后仍然存放在原来的对象中。这样做是为了减少由于少量字符的插入而引起的空间分配问题。
特点大部分方法都有synchronized 同步锁所以是线程安全的
StringBuffer类常用的方法 StringBuffer类对象的长度可以扩大或者缩小但该类对象的容量只能扩大而不能缩小。
3StringBuild类
StringBuilder也是一个可变的字符串对象他与StringBuffer不同之处就在于它是它其中的方法没有添加synchronized 同步锁所以是线程不安全的基于这点它的速度一般都比StringBuffer快。
2String 和 StringBuffer 以及 StringBuilder的具体区别
1可变性的区别
String被final修饰不可变相当于字符串常量
StringBuffer和StringBuild都是继承同一抽象类AbstractStringBuilder类都是可变的
2执行速度的区别
执行速度 StringBuilder StringBuffer String
1String对象是不可变的每次对String对象的操作都会生成新的String对象改变引用虽然原来的String对象会被回收但是还是造成了内存资源的浪费和JVM的线程系统开销。
所以String速度最慢时间复杂度为O(n^2)。
2StringBuild和StringBuffer继承同一抽象类方法基本一样都是可变字符串可以直接对对象本身进行操作不需要生成新的对象、改变对象引用所以速度都比String快
3StringBuild之所以比StringBuffer快的原因是因为StringBuffer大部分方法都加了synchronized同步锁保证了安全的同时速度自然会慢一点,所以String Buffer速度快StringBuild最快且时间复杂的为O(n)远优于O(n^2)。
3安全性能的区别
String是字符串常量不可变也就是线程安全StringBuffer也是线程安全的因为大部分方法都有synchronized 同步锁StringBuild是线程不安全的因为StringBuild是可变字符串数组没有synchronized关键字
4使用场景 一般情况下String适用于少量的字符串操作的情况StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况StringBuffer适用多线程下在字符缓冲区进行大量操作的情况
但是StringBuffer的执行速度并不比StringBuild慢多少而且还保证了线程安全所以还是比较常用。