Java中String和StringBuffer类之间的区别

作者: Laura McKinney
创建日期: 3 四月 2021
更新日期: 14 可能 2024
Anonim
【Java面试题】String StringBuffer StringBuilder的区别
视频: 【Java面试题】String StringBuffer StringBuilder的区别

内容


String和StringBuffer都是对字符串进行操作的类。 StringBuffer类是String类的对等类。 String类的对象的长度是固定的。 StringBuffer类的对象是可增长的。 String和StringBuffer之间的基本区别是“ String”类的对象是 一成不变的。类“ StringBuffer”的对象 易变的.

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础字符串缓冲区
基本的String对象的长度是固定的。StringBuffer的长度可以增加。
修改字符串对象是不可变的。StringBuffer对象是可变的。
性能串联时速度较慢。在连接过程中速度更快。
记忆消耗更多的内存。消耗更少的内存。
存储字符串常量池。堆内存。

字符串的定义

“ String”是Java中的类。 String类的对象具有固定的长度,最重要的是要记住,String类的对象是“不可变的”。初始化String对象后,将无法再次修改该对象。 String类的对象存储在String常量池中。

让我们先了解一下,无论何时创建任何字符串;您创建一个字符串类型的对象。字符串常量也是字符串对象。

System.out.ln(“您好,这是Teckpix解决方案”);

在上面的语句中,字符串“ Hello this is Teckpix Solution”是一个字符串常量。


现在,让我们借助示例来了解String对象的可变性。

字符串str = new字符串(“ Teckpix”); str.concat(“解决方案”); system.out.ln(str); //输出Teckpix

在上面的代码中,我尝试将两个字符串“ Teckpix”和“ Solution”连接起来。众所周知,每当创建一个字符串时,即表示创建了String类型的对象。因此,字符串“ Teckpix”创建了一个对象,该对象的引用已分配给字符串对象“ str”。接下来,我尝试使用String类的方法“ concat()”将另一个字符串“ Solution”与字符串“ Teckpix”连接起来。

由于String对象是不可变的,因此不会对字符串“ Teckpix”进行任何修改,而新的字符串“ Solution”会在字符串常量池中创建另一个对象。但是,对对象“解决方案”的引用没有被任何对象捕获,因此,尽管对对象“解决方案”的引用仍然存在于字符串常量池中,但它仍然丢失。由于未对对象Teckpix进行任何修改,因此当我之前为我分配了Teckpix的引用的对象str时,仅字符串“ Teckpix”。

StringBuffer的定义

类“ StringBuffer”是类“ String”的对等类。 StringBuffer类为字符串提供了更多功能。 StringBuffer类的对象是可变的,因此可以修改其对象。 StringBuffer对象的长度是可增长的。您可以在分配给StringBuffer对象的字符串文字的中间或末尾插入字符或子字符串。当不要求特定长度时,StringBuffer会为16个附加字符分配空间。

让我们借助示例来了解StringBuffer对象的可变性:


StringBuffer Sb =新的StringBuffer(“ Teckpix”); Sb.append(“ Solution”); system.out.ln(Sb); //输出Teckpix解决方案

众所周知,StringBuffer对象是可变的。方法append()修改了StringBuffer对象Sb,该对象最初是对象“ Teckpix”的引用最初分配给的对象。方法append()将新的字符串文字“ Solution”附加到字符串文字“ Teckpix”的末尾。现在,当我使用对象Sb时,将使用修改后的字符串对象“ Teckpix Solutions”。

  1. String对象的长度是固定的,但是在需要时可以增加StringBuffer对象的长度。
  2. 字符串对象是不可变的,即它的对象不能再分配,而StringBuffer的对象是可变的。
  3. 字符串对象的性能较慢,而StringBuffer对象则更快。
  4. String对象消耗更多的内存,而StringBuffer对象消耗的内存更少。
  5. 字符串对象存储在常量池中,而StringBuffer对象存储在堆内存中。

结论:

与String类相比,StringBuffer对象为字符串提供了更多功能。因此,最好使用StringBuffer而不是String类。