- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
全部,
我想知道使用 setLength(0) 清除 StringBuffer 内容是否有意义。即,这样做更好吗:
while (<some condition>)
{
stringBufferVariable = new StringBuffer(128);
stringBufferVariable.append(<something>)
.append(<more>)
... ;
Append stringBufferVariable.toString() to a file;
stringBufferVariable.setLength(0);
}
我的问题:
1 > 这仍然比使用 String 对象附加内容有更好的性能吗?
我不太确定重新初始化 StringBuffer 变量会如何影响性能,从而影响问题。
请发表您的看法
[编辑]:删除了关于与 StringBuilder 进行比较的第二个问题,因为我知道根据响应没有更多需要研究的内容。
最佳答案
如果你问是否
stringBufferVariable.append("something")
.append("more");
...
将比与 +
连接执行得更好,然后是的,通常。这就是这些类存在的全部原因。与更新 char
数组中的值相比,创建对象的成本很高。
现在看来大多数(如果不是全部)编译器在简单情况下(例如 str = "something"+ "more"+ "...";
)将字符串连接转换为使用 StringBuilder。然后我可以看到的唯一性能差异是编译器将没有设置初始大小的优势。基准测试会告诉您差异是否足够重要。不过,使用 +
会使代码更具可读性。
根据我的阅读,编译器显然无法优化在循环中完成的连接,例如
String str = "";
for (int i = 0; i < 10000; i++) {
str = str + i + ",";
}
所以在这些情况下,您仍然希望显式使用 StringBuilder。
StringBuilder
不是线程安全的,而 StringBuffer
是线程安全的,但它们在其他方面是相同的。在 StringBuffer 中执行的同步使其变慢,因此 StringBuilder
更快,除非您需要同步,否则应该使用它。
setLength
吗?您的示例当前的编写方式我不认为对 setLength
的调用会给您带来任何好处,因为您在每次通过循环时都创建了一个新的 StringBuffer。你真正应该做的是
StringBuilder sb = new StringBuilder(128);
while (<some condition>) {
sb.append(<something>)
.append(<more>)
... ;
// Append stringBufferVariable.toString() to a file;
sb.setLength(0);
}
这避免了不必要的对象创建,并且 setLength 在这种情况下只会更新内部 int
变量。
关于Java : Clearing StringBuffer contents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4061523/
为什么下一行没有给出编译时错误? StringBuffer sb = new StringBuffer(new StringBuffer()); 我在网上查了很多也找不到原因。不仅如此,它还允许 St
我在 http get 请求中使用了下面的代码,但是我从返回中得到的是 null。我不知道为什么。 public static String getResponseFromGetUrl(Strin
错误是: Unreachable statement in line StringBuffer buffer = new StringBuffer() 这是我的代码: public void
当 StringBuffer 超出容量时,是否会创建一个新的 StringBuffer 对象,还是仍然是旧的? class Test{ public static void main(String[]
1.我对这两者感到困惑,如果有的话,它们有不同的功能吗? StringBuffer(CharSequence chars) 和 StringBuffer(String str) 2。 String 和
阅读本文后 - What does 'synchronized' mean?我仍然无法理解为什么 StringBuffer 在线程安全环境中会比 StringBuilder 慢。 StringBuff
考虑以下代码 final class immudemo { private static final StringBuffer bf = new StringBuffer("Yaxita"
Groovy支持用于创建StringBuilder / StringBuffer的文字语法,而不是通常的语法 def sb = new StringBuilder() 但是,我似乎无法记住(或在Goo
这是我尝试使用数组构建 stringBuffer。我该如何解决这个问题? import java.util.ArrayList; public class StringBufferProj { pub
我对官方 Javadoc 的说法感到困惑 public StringBuffer replace(int start, int end, String str) Replaces the charac
与将所有数组项附加到 StringBuffer 然后打印相比,为什么在循环中打印数组项需要更多时间? 在此,我在循环中打印了数组项。 public static void main (String[]
我目前正在使用很多这样的内容来重构应用程序: StringBuffer buff1 = new StringBuffer(""); buff1.append("some value A"); buff
我有一个简单的函数,用于连接到服务器并将响应作为字符串返回。当返回的数据量较小但响应较大时,它可以正常工作。它不会完整存储服务器返回的响应字符串,并以...结尾。令人惊讶的是,system.out.p
我对编程还很陌生,需要一些帮助。我正在学习如何使用 StringBuffer 类,并且编写了一个简单的代码。但是,当我尝试运行该程序时,我不断收到错误消息“找不到符号”。任何建议都会很棒!谢谢! pu
在ArrayList中,添加操作是摊销操作。因此,在阅读 StringBuffer 时,我想到了为什么 StringBuffer 不进行摊销。假设我对字符串缓冲区对象使用追加操作,那么它应该能够在其底
我正在尝试在字符串中切换 $ 及其右侧的字符。我不允许使用 char[],所以我决定使用 StringBuffer。但是,当我尝试使用 H$E 之类的内容运行代码时,它会输出 HE$H$E 我不知道额
这个问题已经有答案了: Difference between StringBuilder and StringBuffer (33 个回答) 已关闭 9 年前。 很多人都提到过Java中StringB
我正在尝试从InputStream 中读取一些数据,然后将它们放入StringBuffer 中进行打印。 我把这段代码放在main方法中。 我的问题是,只有在调试代码时才打印 StringBuffer
我正在运行此代码: public class testttt { public static void main(String[] args){ ArrayList listOne = new
我有以下代码: public class MyLogger { private StringBuilder logger = new StringBuilder(); public voi
我是一名优秀的程序员,十分优秀!