1
16
简短回答:
如果你
做
知道在编译时要组合哪些字符串,
示例1:您要组合“cat”、“dog”和“mouse”。这正好是11个字符。您可以简单地分配
示例2:您希望将用户提供的未指定数量的字符串联接到单个字符串中。由于要连接的数据量事先未知,因此使用
|
2
16
StringBuilder不一定更快。我记得,如果字符串的具体化少于12个,那么字符串的具体化(eiether via string.concat或simple str1+str2)实际上更快。原因是StringBuilder的分配和初始化实际上需要时间。 StringBuilder速度更快的原因是它创建了一个内部缓冲区,并将字符串添加到该缓冲区中。如果要连接20个字符串,StringBuilder只需将一个接一个的字符串附加到其缓冲区,并在请求时最终返回结果-通过其ToString()方法。(我假设有足够的缓冲空间。否则,StringBuilder会担心重新分配缓冲区,并有一些启发式方法来帮助缓冲区不重新分配太多次。)如果您是连接字符串,则每个字符串连接都会分配一个新的长度字符串(str1.length+str2.length),并将第一个和第二个字符串复制到适当的位置。这导致了大量字符串的重新复制。
这将需要n-1分配和n-1复制操作。对于大型N,这可能会非常昂贵。另外,请注意,您复制str1 n-1的内容的次数。一次得到str1+str2的结果。然后再次得到(str1+str2)+str3的结果。使用StringBuilder,每个字符串只复制一次到内部缓冲区,前提是缓冲区足够大,可以容纳单个字符串。 |
3
5
我认为你真的应该读这个: The Sad Tragedy of Micro-Optimization Theater ,您对StringBuilder v/s concat的回答,跳跃后 |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Manan Girdhar · 拆分字符串并仅在java中使用第二部分 2 年前 |
AnxiousLuna · Python使用len()获取数组索引数 2 年前 |
antonoyaro8 · 数据帧中每列上的Grepl 2 年前 |