在这里,我们将讨论String
和StringBuffer
类之间的差异。
String
vs StringBuffer
1)可变性:字符串是不可变的(一旦创建,不能修改),而StringBuffer
是可变的(可以修改)。
示例 – 字符串是不可变的:
String str = "Hello World";
str = "Hi World!";
通过查看此代码,您会说str
的值已经改变,那么它如何变为不可变?让我解释一下:
在第一个语句中,使用字符串文字"Hello World"
创建一个对象,在第二个语句中,当我们将新字符串文字"Hi World!"
分配给str
时,对象本身没有改变而是使用字符串文字"Hi World!"
在内存中创建一个新对象,并将其引用分配给str
。因此,基本上两个对象"Hello World"
和"Hi World!"
存在于具有不同引用(位置)的存储器中。
StringBuffer
是可变的:
让我们看看StringBuffer
的可变性
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
在第一个语句中,StringBuffer
对象是使用字符串文字"Hello"
创建的,而在第二个语句中,对象的值从"Hello"
更改为"Hello World"
。与字符串不同,对象被修改而不是创建新对象。
2)性能:在执行连接时,您应该优先选择StringBuffer
而不是String
,因为它更快。原因是:当您使用String
连接字符串时,实际上每次都创建新对象,因为String
是不可变的。
一个线程安全,可变的字符序列。字符串缓冲区就像一个String
,但可以修改。在任何时间点它都包含一些特定的字符序列,但序列的长度和内容可以通过某些方法调用来改变。