String,SringBuffer和 StringBuilder的区别
发布网友
发布时间:2022-04-14 04:10
我来回答
共1个回答
热心网友
时间:2022-04-14 05:40
String是一个类,但却是不可变的,所以String创建的算是一个字符串常量,StringBuffer和StringBuilder都是可变的。所以每次修改String对象的值都是新建一个对象再指向这个对象。而使用StringBuffer则是对StringBuffer对象本身进行操作。所以在字符串j经常改变的情况下,使用StringBuffer要快得多。
但在某些情况下:
Java代码
String S1 = “Who” + “ is” + “ faster?”;
StringBuffer Stb = new StringBuilder(“Who”).append(“ is”).append(“ faster?”);
Java代码
String S1 = “Who” + “ is” + “ faster?”;
StringBuffer Stb = new StringBuilder(“Who”).append(“ is”).append(“ faster?”);
S1的素对会比Stb快得多, 是因为JVM把String对象的拼接解释成了StringBuffer对象的拼接,其实在JVM就是:
Java代码
String S1="Who is faster?";
Java代码
String S1="Who is faster?";
不过如果,字符串是来自其他对象,如:
Java代码
String s1="Who";
String s2=" is";
String s3=" faster?";
String st=s1+s2+s3;
Java代码
String s1="Who";
String s2=" is";
String s3=" faster?";
String st=s1+s2+s3;
这个时候,String的速度就比不上StringBuffer了。
StringBuffer和StringBuilder
在操作字符串对象,StringBuiler是最快的,StringBuffer次之,String最慢。
Java代码
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
ublic final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
Java代码
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
ublic final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
可以看到StringBuffer和StringBuilder都继承继承了同一个抽象类。
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
String,StringBuffer和StringBuilder的区别
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法...
string和stringbuffer和stringbuilder的区别
string和stringbuffer和stringbuilder的区别如下:1、线程安全:StringBuffer:线程安全,StringBuilder:线程不安全。因为StringBuffer的所有公开方法都是synchronized修饰的,StringBuilder并没有StringBuilder修饰。2、缓冲区:StringBuffer每次获取toString都会直接使用缓存区的toStringCache值来构造一个字符串。而StringBui...
“String、StringBuffer和StringBuilder”之间的区别是什么?
1、类型不同:String是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。StringBuffer是字符串变量,它的对象是可以扩充和修改的。StringBuilder是一个可变的字符序列。2、作用:String类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。StringBuffer...
string和stringbuffer和stringbuilder的区别
string和stringbuffer和stringbuilder的区别:1、可变与不可变2、初始化方式3、字符串修改方式4、是否实现了equals方法5、是否实现了hashCode方法1、可变与不可变 String类是一个不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁。StringBuffer与StringBuilder都继承自AbstractStr...
string和stringbuffer和stringbuilder的区别是什么?
string和stringbuffer和stringbuilder的区别 1、String是字符串常量,而StringBuffer和StringBuilder是字符串变量。由String创建的字符内容是不可改变的,而由StringBuffer和StringBuidler创建的字符内容是可以改变的。2、StringBuffer是线程安全的,而StringBuilder是非线程安全的。StringBuilder是从JDK 5开始,为String...
string,stringbuffer和stringbuilder的区别
string、stringbuffer和stringbuilder的区别:string:是Java中的基本字符串类型,它是一个不可变的字符串对象。一旦创建了一个string对象,就不能改变它的值。每次对string对象进行修改,都会创建一个新的对象。因此,在处理大量字符串操作时,使用string可能会导致性能问题。StringBuffer:是一个可变的字符串...
String 和StringBuffer StringBuild 的区别:
1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。3. StringBuilder:线程非安全的 StringBuffer:线程...
String、StringBuffer和StringBuilder的区别是什么?
速度有区别三者在执行速度方面的比较:三者在执行速度方面的比较:StringBuilder > StringBuffer > String tring和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。string是C++、java等...
深入理解String、StringBuffer和StringBuilder类的区别
它们的相同点是都用来封装字符串;都实现了CharSequence接口。它们之间的区别如下:一、可变与不可变 String类是一个不可变类,即创建String对象后,该对象中的字符串是不可改变的,直到这个对象被销毁。StringBuffer与StringBuilder都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存...
Java中String,StringBuilder和StringBuffer的区别
在Java中,String,StringBuilder和StringBuffer的区别有:String是对象不可变的(因为它的原理是一个final修饰的字符数组),而StringBuilder和StringBuffer是对象可变的,它们两个都继承AbstractStringBuilder类。从线程安全角度考虑,String是对象不可变的,显然线程安全。StringBuffer对方法加了同步锁或者对调用的...