String类和StringBuffer类的区别

小编 1384

String类和StringBuffer类的区别包括:1.可变性不同;2.使用条件不同;3.覆盖方法不同;4.对象可连接性不同;5.toString方法的实现不同;6.操作的灵活性不同。可变性不同是指,String类是不可变类,一旦创建其内容和长度都无法改变;而StringBuffer类是可变类,其内容和长度可以修改。

1.可变性不同

String类是不可变类:一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

StringBuffer类是可变类:StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。

2.使用条件不同

String类表示的字符串是常量,因此在操作字符串时,如果该字符串仅用于表示数据类型,使用String类即可;而StringBuffer表示字符容器,因此如果需要对字符串中的字符进行增删操作,则使用StringBuffer类。

3.覆盖方法不同

String类覆盖了Object类的equals()方法;而StringBuffer类没有覆盖Object类的equals()方法。

4.对象可连接性不同

String类对象可以用操作符+进行连接,而如果换成StringBuffer类进行“+ ”号拼接,编译将提示出错。

5.toString方法的实现不同

String类的toString()方法返回当前String实例本身的引用;而StringBuffer类的toString方法返回一个以当前StringBuffer的缓冲区中的所有字符串为内容的新的String对象的引用。

6.操作的灵活性不同

String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。

而StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类。StringBuffer对象可以调用其方法动态的进行增加、插入、修改和删除操作,且不用像数组那样事先指定大小,从而实现多次插入字符,一次整体取出的效果,因而操作字符串非常灵活方便。一旦通过StringBuffer生成最终想要的字符串,就可调用它的toString方法将其转换为一个String对象。

延伸阅读

StringBuilder类是做什么的

StringBuilder 类表示可以修改的类似字符串的对象,即可变字符串。它的实现方式与string类型不同,后者表示不可变的字符串。StringBuilder维护一个内部缓冲区来保存字符。如果缓冲区中有可用空间,它会附加新数据。否则,它会创建一个新缓冲区,将旧数据复制到新缓冲区,然后附加数据。

1.StringBuilder的构造方法

public StringBuilder()创建一个空白可变字符串对象,不含有任何内容;

public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象。

2.StringBuilder类拼接和反转方法

public StringBuilder append(任意类型) 拼接数据,并返回对象本身;

public StringBuilder insert(int offset, 任意类型) 在指定位置插入数据,并返回对象本身;

public StringBuilder reverse() 反转字符串,并返回对象本身。

3.String和StringBuilder相互转换

StringBuilder转换String:

  • public String toString() :通过StringBuilder类中的toString() 就可以实现把StringBuilder转换为String。

String转换StringBuilder:

  • public StringBuilder(String s) :通过StringBuilder的构造方法就可以实现把String 转换为StringBuilder。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部