【问题标题】:Difference between String class and StringBuffer class [duplicate]String类和StringBuffer类之间的区别[重复]
【发布时间】:2013-07-27 10:30:23
【问题描述】:

String类和StringBuffer类有什么区别?

【问题讨论】:

  • 我很惊讶谷歌搜索没有结果?
  • 哎呀。抱歉问这个问题。
  • StringBuffer 是一个遗留类,而 String 不是。如果可以,请使用 StringBuilder(如 Javadoc 所述)

标签: java string stringbuffer


【解决方案1】:

字符串是不可变的。他们的内部状态无法改变。 StringBuffer 允许您缓慢地添加到对象中,而无需在每次连接时创建新的字符串。

使用 StringBUilder 代替旧的 StringBuffer 是一种很好的做法。


使用 StringBuilder 或 StringBuffer 的常见地方是复杂对象的 toString 方法。假设您希望 toString 方法列出内部数组中的元素。

天真的方法:

String list = ""; 
for (String element : array) {
    if (list.length > 0) 
        list += ", ";
    list += element;
}

return list;

这个方法会起作用,但是每次你使用 += 时,你都在创建一个新的 String 对象。这是不可取的。处理这个问题的更好方法是使用 StringBuilder 或 StringBuffer。

StringBuffer list = new StringBuffer(); 
for (String element : array) {
    if (list.length() > 0) 
        list.append(", ");
    list.append(element);
}

return list.toString();

这样,你只创建一个StringBuffer,但可以产生相同的结果。

【讨论】:

  • 您可能还想提及线程安全方面的差异。
  • 或者干脆不要浪费你的时间。这显然是一个重复的问题......多次重复。
【解决方案2】:

"字符串:http://docs.oracle.com/javase/tutorial/i18n/text/characterClass.html

字符串缓冲区:http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html

工作完成。 Google 是您的朋友

当您说字符串缓冲区时,您可能应该改用 stringbuilder。

您可以附加到它们以创建“新”字符串。

StringBuilder sb = new StringBuilder
sb.append("stuff here").append("more stuff here").append.....

字符串只是字符串,不能更改。

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 2014-09-23
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多