我写了一些代码,里面有很多字符串创建。为了避免反复创建昂贵的字符串,我使用的是java StringBuilder
类。
我的代码有点像这样:
public String createString(){
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < Integer.MAX_VALUE ; i++){ //its not actually this, but it's a large loop.
stringBuilder.append(appendString())
}
return stringBuilder.toString();
}
appendString
方法还会实例化StringBuilder
并附加到它。
为了节省时间,我注意到我可以让我的appendString
方法返回StringBuilder
,而不是String
,这样可以避免使用.toString()
方法返回stringBuilder这样:
public StringBuilder appendString(){
StringBuilder appendBuilder = new StringBuilder();
appendBuilder.append("whatever");
return appendBuilder;
}
在我查看StringBuilder
文档并发现append(StringBuilder stringBuilder)
类没有StringBuilder
方法,只有append(String string)
之前,这一切都很好。
所以我的问题是,这段代码是如何运行的?是否将StringBuilder
投射到String
?
答案 0 :(得分:6)
StringBuilder
有public StringBuilder append(CharSequence s)
方法。 StringBuilder
实现CharSequence
接口,因此您可以将StringBuilder
传递给该方法。
答案 1 :(得分:2)
有很多append()
次重载,包括append(CharSequence cs)
。字符串是用自己的方法处理的,其他CharSequences
没有自己的重载由更普遍的处理。
有趣的是, 是append(StringBuffer sb)
。