java这会使StringBuilder的使用变得多余吗?
如果我这样做:
StringBuilder sb = new StringBuilder();
sb.append("somestring" + "hello" + "more strings" + "last one");
这与:
string s = "somestring";
s + "hello" + "more strings" + "last one";
使用字符串生成器会变得毫无意义吗?因此需要使用:
StringBuilder sb = new StringBuilder();
sb.append("somestring");
sb.append("hello");
sb.append("more strings");
sb.append("last one");
# 1 楼答案
在多次追加元素时,应该使用
StringBuilder
和StringBuffer
而不是字符串“+”操作。例如:因为这将被转换成(类似的东西):
在每次迭代中(在字节码等价物中),您将创建一个
StringBuffer
,并将其转换为一个String
有很多来源,但是:this和this都可以。我在2010年左右做了一个关于这个问题的小研究,我对这个问题的了解可以追溯到那时。如果从那时起有其他改进,我不知道
# 2 楼答案
你的长问题的简短回答是“是”
# 3 楼答案
StringBuilder是可变的,但String不是。 StringBuilder使这些字符串操作更加高效。 对于像你的例子这样的小作品,你可能不会注意到它们之间的区别
# 4 楼答案
查看使用StringBuilder的代码与简单连接字符串的代码的编译输出,我发现最新的编译器通常会使用StringBuilder,无论何时合适。话虽如此,请注意,在第一个示例中,您需要说's=s+“hello”;为了抓住结果
# 5 楼答案
如果这是你在那段代码中对
StringBuilder
的使用,那么它确实是毫无意义的。如果在初始调用append
之后继续追加,那么它并不是完全没有意义的。不过,你的最后一个例子比前两个更有意义我假设你帖子中的常量只是为了清楚起见。如果它们确实是常量,编译器将执行constant folding,使第一个示例相当于
# 6 楼答案
在第一种情况下,编译器将检测固定文本,并将其作为单个值内联。就像
将被视为
因此,它只会向StringBuilder追加一次
在第二种情况下,它会附加多次