我有一种感觉,使用:StringBuilder.toString()是缓慢的,非常耗费资源..
所以我在考虑这样的事情:
public static void doSomething(String data){ ... }
public static void main(String[] args)
{
StringBuilder s = new StringBuilder();
doSomething(""+s);
}
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否还有另一种"更好,更快"的方法,因为doSomething(""+s)在循环中会产生一个新的String实例,因为我认为这是空的引号,并且把它放在里面并不是一个好主意一个循环.
doSomething(""+s); 由JVM转换为以下代码
doSomething( new StringBuilder().append("").append(s.toString() ).toString() );
所以现在,不是拥有1个字符串构建器,而是拥有2个,并且两次调用StringBuilder.toString().
更好更快的方法是只使用StringBuilder,而无需手动连接字符串.
我刚检查了用java 1.6.0_26生成的字节码,编译器是智能的,只调用了一次toString(),但它仍然创建了2个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |