我们大多倾向于遵循上述最佳实践.
看看String vs StringBuilder
但是,即使有足够的可用内存, StringBuilder也可能抛出OutOfMemoryException.它抛出OOM异常,因为它需要"连续的内存块".
一些链接供参考 StringBuilder OutOfMemoryException
而且还有更多......
你们中有多少人遇到过这个问题或意识到你们做了什么来解决这个问题?
有什么我想念的吗?
PS:我没有意识到这一点.
我已经改写了这个问题.
***同样的事情与手动连接一起使用(我将验证这一点并更新SO).引起我担忧的另一件事是系统中有足够的内存.这就是我在这里提出这个问题的原因,以检查是否有人遇到这个问题或者代码有什么严重错误.
您创建的underyling字符串还需要一个连续的内存块,因为它表示为chars数组(数组需要连续的内存).如果StringBuilder抛出一个OOM异常,那么如果没有它,你将无法构建底层.
如果创建字符串会导致OOM,则应用程序中可能存在更严重的问题.
编辑以回应澄清:
有一小部分情况,当手动连接成功时,使用StringBuilder构建字符串将失败.手动连接将使用所需的确切长度以组合两个字符串,而StringBuilder具有用于分配内存的不同算法.它更具侵略性,可能会分配比字符串实际需要的内存更多的内存.
使用StringBuilder还会导致所需内存暂时加倍,因为字符串将在System.String形式和StringBuilder中同时存在一小段时间.
但是,如果一种方式导致OOM而另一种方式不是,那么它仍可能指向您的程序中更严重的问题.