Java中String和StringBuffer类之间的区别
内容
String和StringBuffer都是对字符串进行操作的类。 StringBuffer类是String类的对等类。 String类的对象的长度是固定的。 StringBuffer类的对象是可增长的。 String和StringBuffer之间的基本区别是“ String”类的对象是 一成不变的。类“ StringBuffer”的对象 易变的.
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 串 | 字符串缓冲区 |
---|---|---|
基本的 | 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”。
- String对象的长度是固定的,但是在需要时可以增加StringBuffer对象的长度。
- 字符串对象是不可变的,即它的对象不能再分配,而StringBuffer的对象是可变的。
- 字符串对象的性能较慢,而StringBuffer对象则更快。
- String对象消耗更多的内存,而StringBuffer对象消耗的内存更少。
- 字符串对象存储在常量池中,而StringBuffer对象存储在堆内存中。
结论:
与String类相比,StringBuffer对象为字符串提供了更多功能。因此,最好使用StringBuffer而不是String类。