Skip to content

Latest commit

 

History

History
39 lines (23 loc) · 2.17 KB

File metadata and controls

39 lines (23 loc) · 2.17 KB

StringStringBuffer之间的区别

原文: https://beginnersbook.com/2014/08/string-vs-stringbuffer/

在上一篇文章中,我们讨论了StringBufferStringBuilder之间的差异。在这里,我们将讨论StringStringBuffer类之间的差异。

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是不可变的。

StringBuffer的 java 文档说了什么:

来自StringBuffer javadoc

一个线程安全,可变的字符序列。字符串缓冲区就像一个String,但可以修改。在任何时间点它都包含一些特定的字符序列,但序列的长度和内容可以通过某些方法调用来改变。