- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 concat、StringBuffer 和 StringBuilder 之间的区别。我知道 StringBuffer.toString 支持数组的内存问题可能会导致内存爆炸。我什至知道 JDK Sun 优化包括为初始容量分配 2 的幂。
但我仍然想知道重用 StringBuffer(在 toString() 中使用)的最佳方法,或者重用 StringBuffer 是否合适。考虑到内存和速度性能,哪一个更好?
public String toString2() {
StringBuffer sb = new StringBuffer(<size>)
... several .append(stuff) ...
sb.trimToSize()
return sb.toString()
}
或
private StringBuffer sb = new StringBuffer(<size>)
public String toString2() {
sb.delete()
sb.setLength(1024)
sb.trimToSize()
... several .append(stuff) ...
return sb.toString()
}
为什么?
最佳答案
我会说第一个示例绝对更清晰、更易于阅读且更安全——这应该几乎总是胜过性能微优化问题。 如果您确实遇到性能问题,并且您可以证明(通过具体测量)它是由这段代码引起的,并且您还可以通过测量证明,在您的本地环境中,第二个示例明显更快,然后 - 只有这样 - 您才有充分的理由使用它。
否则,您的问题没有通用的答案。如果人们声称第二个示例平均快了 n%,如果它对您的机器没有任何影响(无论是因为不同的环境,还是因为实际一段代码在您的应用中很少被调用)?
然而,我个人的直觉是,在现代 JVM 上(阅读:至少在 JDK6 上,但可能已经在 JDK5 上),第一个示例实际上可能更快,因为聪明的 GC 技巧使短-住的 object 极其便宜。特别是如果您使用 StringBuilder
而不是 StringBuffer
,它没有同步开销。
关于java - 重用 StringBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10171223/
为什么下一行没有给出编译时错误? 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
我是一名优秀的程序员,十分优秀!