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