StringBuilder的效率
Efficiency of StringBuiler
我注意到这两种使用 StringBuilder 的方式之间存在性能差异:
StringBuilder text = new StringBuilder();
// style 1
text.append("a" + "b");
// style 2
text.append("a").append("b");
似乎附加的数据文本越多,样式 1 的效率就越低。事实上,在我的压力文本中,与样式 2 相比,样式 1 花费了大约两倍的时间。有人可以解释为什么样式 1 效率较低吗?感谢您的帮助!
样式 1 需要创建一个不可变字符串 "ab" 以附加(到 StringBuilder)。样式 2 将字符串 "a" 和 "b" 直接附加到 StringBuilder.
我认为原因是因为示例 1 使用字符串 class 连接两个字符串,然后将其附加到您的构建器。
但是,当使用示例二时,字符串 class 不会 need.To be.used 加入,而只是将字符串添加到您的构建器中。
部分原因是因为无法更改字符串,您无法将 "a" 更改为 "ab"。创建了一个全新的 String 对象,而 Stringbuilder 可以在不创建新对象的情况下更改其值。
See here for info on Stringbuilder vs String
我注意到这两种使用 StringBuilder 的方式之间存在性能差异:
StringBuilder text = new StringBuilder();
// style 1
text.append("a" + "b");
// style 2
text.append("a").append("b");
似乎附加的数据文本越多,样式 1 的效率就越低。事实上,在我的压力文本中,与样式 2 相比,样式 1 花费了大约两倍的时间。有人可以解释为什么样式 1 效率较低吗?感谢您的帮助!
样式 1 需要创建一个不可变字符串 "ab" 以附加(到 StringBuilder)。样式 2 将字符串 "a" 和 "b" 直接附加到 StringBuilder.
我认为原因是因为示例 1 使用字符串 class 连接两个字符串,然后将其附加到您的构建器。 但是,当使用示例二时,字符串 class 不会 need.To be.used 加入,而只是将字符串添加到您的构建器中。
部分原因是因为无法更改字符串,您无法将 "a" 更改为 "ab"。创建了一个全新的 String 对象,而 Stringbuilder 可以在不创建新对象的情况下更改其值。 See here for info on Stringbuilder vs String