Java 中 String, StringBuffer 和 StringBuilder 的不同

在篇文章中,我们将讨论 Java String、StringBuffer 和 StringBuilder 之间的区别。

String 类

String 类表示字符串。 Java 程序中的所有字符串文字,例如“jiyik”,都是作为此String类的实例来实现的。 字符串是常量; 它们的值在创建后无法更改。

StringBuffer

StringBuffer 是线程安全的、可变的字符序列。 StringBuffer 和 String 类似,但可以修改。

在任何时间点,它都包含一些特定的字符序列,但是序列的长度和内容可以通过某些方法调用来改变。

StringBuffer 可以安全地被多个线程使用。

stringbuilder">

StringBuilder

StringBuilder 是可变的字符序列。 该类提供与 StringBuffer 兼容的 API,但不保证同步。

StringBuilder 类设计的目的是用于在单个线程正在使用 StringBuffer 的地方(通常情况下)作为它的替代品。

在可能的情况下,建议优先使用 StringBuilder 类而不是 StringBuffer,因为它的性能在大多数的情况下要更高。

让我们比较一下 String、StringBuffer 和 StringBuilder 的所有特性,如下表:

特性

String

StringBuffer

StringBuilder

Thread safe?

Yes

Yes

No

Synchronized?

Yes

Yes

No

Modifiable?

No (immutable)

Yes (mutable)

Yes (mutable)

Storage

String Pool

Heap

Heap

Performance

Slow

Fast

Faster


Java 代码示例

在本教程中,我们添加、追加字符串总计 199999 次。

/**

* @author jiyik.com

* Program: Java 中 String, StringBuffer 和 StringBuilder 的不同

*/

publicclassStringVsStringBufferVsStringBuilder {

publicstaticvoidmain(String[] args) {

StringcrunchifyString="";

longcrunchifyBefore= System.currentTimeMillis();

for (inti=0; i < 199999; i++) {

crunchifyString = crunchifyString + "jiyik.com";

}

longcrunchifyAfter= (System.currentTimeMillis());

crunchifyPrint("Task Completion Time for String: " + (crunchifyAfter - crunchifyBefore));

crunchifyBefore = System.currentTimeMillis();

StringBuffercrunchifyStringBuffer=newStringBuffer();

for (inti=0; i < 199999; i++) {

crunchifyStringBuffer.append("jiyik.com");

}

crunchifyAfter = (System.currentTimeMillis());

crunchifyPrint("Task Completion Time for StringBuffer: " + (crunchifyAfter - crunchifyBefore));

crunchifyBefore = System.currentTimeMillis();

StringBuilder crunchifyStringBuilder;

crunchifyStringBuilder = newStringBuilder();

for (inti=0; i < 199999; i++) {

crunchifyStringBuilder.append("jiyik.com");

}

crunchifyAfter = (System.currentTimeMillis());

crunchifyPrint("Task Completion Time for StringBuilder: " + (crunchifyAfter - crunchifyBefore));

}

privatestaticvoidcrunchifyPrint(String s) {

System.out.println(s);

}

}

在 IntelliJ IDEA 或 Eclipse 控制台中将上述程序作为 Java 应用程序运行,将得到如下结果。

/Users/app/app/Installation/jdk-17.0.2.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=50109:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath :/Users/app/.m2/repository/org/slf4j/log4j-over-slf4j/1.7.32/log4j-over-slf4j-1.7.32.jar crunchify.com.tutorial.CrunchifyStringVsStringBuffer

Task Completion Time for String: 19648

Task Completion Time for StringBuffer: 7

Task Completion Time for StringBuilder: 3

Process finished with exit code 0

如果在上面的程序运行时遇到任何问题,或者在 String、StringBuffer 和 StringBuilder 之间有任何问题,请留言讨论。

本文转载自:迹忆客(https://www.jiyik.com)

以上是 Java 中 String, StringBuffer 和 StringBuilder 的不同 的全部内容, 来源链接: utcz.com/z/290273.html

回到顶部