Java 指定确切的StringBuilder容量还是使用默认值?

Java 指定确切的StringBuilder容量还是使用默认值?,java,string,performance,stringbuilder,capacity,Java,String,Performance,Stringbuilder,Capacity,我有一个方法,其中输入URL作为字符串,我必须从中删除一个后缀并添加另一个。出于这个原因,我使用StringBuilder,但我想知道我是否必须指定生成器的确切容量,还是依赖默认值16,这在我的所有情况下都是不够的,因此容量将在代码中始终扩展 我的代码如下: private String constructString(final String url, final String suffixToRemove, final String suffixToAdd) { String

我有一个方法,其中输入URL作为字符串,我必须从中删除一个后缀并添加另一个。出于这个原因,我使用StringBuilder,但我想知道我是否必须指定生成器的确切容量,还是依赖默认值16,这在我的所有情况下都是不够的,因此容量将在代码中始终扩展

我的代码如下:

private String constructString(final String url, final String suffixToRemove, final String suffixToAdd) {
        StringBuilder result = new StringBuilder(url.length() - suffixToRemove.length() + suffixToAdd.length());
        .....
    }
我想确定是放置生成器的默认容量更快,还是放置通过获取三个字符串的
.length
构建的确切容量更快。
String.length
是一个缓慢的操作吗?

您可以这样做:

final int len = url.length() - suffixToRemove.length();
final StringBuilder sb = new StringBuilder(url);
sb.setLength(len);
return sb.append(suffixToAdd).toString();
您可以这样做:

final int len = url.length() - suffixToRemove.length();
final StringBuilder sb = new StringBuilder(url);
sb.setLength(len);
return sb.append(suffixToAdd).toString();

仅对于大文本,它避免重复增加。对于小字符串,可以使用足够小且很少需要增加的大小。但是,计算一个整数表达式时,如果使用几个
.length()
,肯定会超出目标,甚至可能比80(我认为默认值是16)还要慢


微优化和中断阅读代码。

仅对于大文本,它可以避免重复增加。对于小字符串,可以使用足够小且很少需要增加的大小。但是,计算一个整数表达式时,如果使用几个
.length()
,肯定会超出目标,甚至可能比80(我认为默认值是16)还要慢


微优化和中断阅读代码。

对我来说听起来像是微优化。除非你要在
StringBuilder
中输入大量文本,否则我根本不会设置它的初始大小。是的,这是一种微优化。我想知道哪一个更好。对我来说,听起来像是一个微观优化。除非你要在
StringBuilder
中输入大量文本,否则我根本不会设置它的初始大小。是的,这是一种微优化。我想知道哪个更好。