Java 如何快速从StringBuilder获取字符串?
我觉得使用:StringBuilder.toString()速度慢,而且非常消耗资源 所以我在想这样的事情:Java 如何快速从StringBuilder获取字符串?,java,Java,我觉得使用:StringBuilder.toString()速度慢,而且非常消耗资源 所以我在想这样的事情: public static void doSomething(String data){ ... } public static void main(String[] args) { StringBuilder s = new StringBuilder(); doSomething(""+s); } 但我想知道是否还有其他“更好更快”的方法,因为循环中的doSome
public static void doSomething(String data){ ... }
public static void main(String[] args)
{
StringBuilder s = new StringBuilder();
doSomething(""+s);
}
但我想知道是否还有其他“更好更快”的方法,因为循环中的doSomething(“+s)
将生成一个新的字符串实例,因为空引号“,”我认为,把它放在循环中不是一个好主意。doSomething(“+s”)代码>被JVM转换为以下代码
doSomething(新的StringBuilder().append(“”).append(s.toString()).toString())代码>
所以现在,您没有使用1个字符串生成器,而是使用了2个,并调用了StringBuilder.toString()两次
更好更快的方法是只使用StringBuilder,而不用手动连接字符串
我刚刚检查了java 1.6.026生成的字节码,编译器是智能的,只调用了一次toString(),但它仍然创建了两个StringBuilder实例。这是字节码
0 new java.lang.StringBuilder [16]
3 dup
4 invokespecial java.lang.StringBuilder() [18]
7 astore_1 [s]
8 new java.lang.StringBuilder [16]
11 dup
12 invokespecial java.lang.StringBuilder() [18]
15 aload_1 [s]
16 invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [19]
19 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [23]
22 invokestatic my.test.Main.doSomething(java.lang.String) : void [27]
25 return
为什么您认为StringBuilder.toString()速度慢且占用资源?