gpt4 book ai didi

java - 如何快速从StringBuilder中获取字符串?

转载 作者:行者123 更新时间:2023-12-01 16:37:36 27 4
gpt4 key购买 nike

我有一种感觉,使用 StringBuilder.toString() 很慢并且非常消耗资源..

所以我正在考虑这样的事情:

public static void doSomething(String data){ ... }

public static void main(String[] args)
{
StringBuilder s = new StringBuilder();
doSomething(""+s);
}

但是我想知道是否还有其他“更好更快”的方法,因为循环中的 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

关于java - 如何快速从StringBuilder中获取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com