Java StringBuilder与String(在确切情况下)
我已经读过Java中的StringBuilder类,我想知道,做一些任务更有效的方法是什么:Java StringBuilder与String(在确切情况下),java,string,stringbuilder,Java,String,Stringbuilder,我已经读过Java中的StringBuilder类,我想知道,做一些任务更有效的方法是什么: 使用“+”连接: String result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:y=\"http://api.yandex.ru/yaru/\">" + "<title>"
使用“+”连接:
String result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:y=\"http://api.yandex.ru/yaru/\">"
+ "<title>" + (et_title.getText().toString()) + "</title>" +
"<y:access>"+ privacymode +"</y:access>" +
"<category scheme=\"urn:ya.ru:posttypes\" term=\"link\"/>"
+ "<y:meta>" + "<y:url>" + (et_link.getText().toString()) + "</y:url>" +
"</y:meta>" +
"<content>" + signature_select() + "</content>"
+ "</entry>";
String result=“”+
""
+“”+(et_title.getText().toString())+“”+
“”+privacymode+“”+
""
+“”+“”+(et_link.getText().toString())+“”+
"" +
“”+签名\u选择()+“”
+ "";
或 StringBuilder sb = new StringBuilder();
sb.append( "<?xml version=\"1.0\" encoding=\"utf-8\"?>")
.append("<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:y=\"http://api.yandex.ru/yaru/\">")
.append("<title>")
.append(et_title.getText().toString())
.append("</title>")
.append("<y:access>"+ privacymode +"</y:access>")
.append( "<category scheme=\"urn:ya.ru:posttypes\" term=\"link\"/>")
.append("<y:meta>" + "<y:url>" + (et_link.getText().toString()) + "</y:url>" + "</y:meta>")
.append( "<content>" + signature_select() + "</content>")
.append("</entry>");
String result = sb.toString();
StringBuilder sb=新建StringBuilder();
某人加上(“”)
.附加(“”)
.附加(“”)
.append(et_title.getText().toString())
.附加(“”)
.append(“+privacymode+”)
.附加(“”)
.append(“+”+(et_link.getText().toString())+“+”)
.append(“+签名\选择()+”)
.附加(“”);
字符串结果=sb.toString();
这似乎是对过早优化的担忧。如果这是一段一次性的代码,并且没有在一个紧密的循环中被调用,那么为什么要担心优化呢
话虽如此,xml文本通常在文本文件中找到,而不是在程序中硬编码,然后使用循环和StringBuilder,即
StringBuilder xmlSb = new StringBuilder();
Scanner xmlScanner = new Scanner(Foo.class.getResourceAsStream(RESOURCE));
while (xmlScanner.hasNextLine()) {
xmlSb.append(xmlScanner.nextLine());
}
if (xmlScanner != null) {
xmlScanner.close();
}
// parse and use your xml text here
编辑:看起来Java编译器将优化字符串连接(+)版本,因此两个版本的性能都相同,第一个版本的优点是可读性更好。
为了历史的目的留下我以前的答案
谢谢你的评论
StringBuilder版本更好 我还将打破StringBuilder版本中的其他连接,例如:
.append("<y:access>"+ privacymode +"</y:access>")
.append(“+privacymode+”)
作为:
.append(“”)
.append(privacymode)
.附加(“”)
使用StringBuilder的最大优点是可以避免为每次连接分配新字符串,而StringBuilder只会在必要时分配和调整其内部字符数组的大小。如果你知道最后一根绳子的大小,那就更好了。然后您可以使用最终大小初始化StringBuilder,并避免任何额外的内存分配。根据经验,使用前者。让编译器为您进行优化。这似乎是对过早优化的担忧。如果这是一段一次性的代码,并且没有在一个紧密的循环中被调用,那么为什么要担心优化呢?话虽如此,xml文本通常是在文本文件中找到的,而不是在程序中硬编码的。为什么要破坏内部连接?@Kondra007,因为内部连接将创建两个新字符串(在我的示例中)在将参数传递到append函数之前。我想了解为什么有人投票否决我…否决票被否决票作废。使用StringBuilder的最大优点是避免为每个串联分配新字符串。我没有否决票,但该语句不正确(也许值得投否决票?)。更多信息,请阅读指向重复问题的链接。
.append("<y:access>")
.append(privacymode)
.append("</y:access>")