StringBuffer如何与.append一起使用

时间:2013-01-11 22:44:12

标签: java string-concatenation stringbuffer

我正在做一个计算机科学项目,我需要合并StringBuffer。我需要帮助.append做什么以及连接意味着什么。有人告诉我,我可以通过.append使用StringBuffer来显示谁是我的游戏的赢家。

  public static void winner ()
  {
    if (position1 >= 100){
      System.out.println("THE WINNER IS " + name1); 
    }
    else if (position2 >= 100){
      System.out.println("THE WINNER IS " + name2); 
    }
  }

我可以使用StringBuffer来输出赢得游戏的人吗?

,而不是将名称作为字符串?

7 个答案:

答案 0 :(得分:7)

感谢编译器,您已经在使用StringBuilder StringBuffer这是public static void winner () { if (position1 >= 100){ System.out.println(new StringBuilder("THE WINNER IS ").append(name1).toString()); } else if (position2 >= 100){ System.out.println(new StringBuilder("THE WINNER IS ").append(name2).toString()); } } 的更新版本。

上面的代码将编译为相当于:

StringBuilder

所以,在这种情况下,你不会完成任何尚未完成的事情。在循环中构建String时使用public static void winner() { StringBuilder out = new StringBuilder("THE WINNER IS "); if (position1 >= 100) { out.append(name1); } else if (position2 >= 100 { out.append(name2); } else { return; // Preserve previous behavior just in case, remove this if it's not needed } System.out.println(out); }

在您的情况下,他们可能正在讨论为两种情况预先初始化单个StringBuilder:

{{1}}

答案 1 :(得分:3)

您可能需要以下内容:

  public static void winner ()
  {
      StringBuffer sb = new StringBuffer("THE WINNER IS ");

      if (position1 >= 100)
          System.out.println(sb.append(name1).toString());
      else if (position2 >= 100)
          System.out.println(sb.append(name2).toString());
  }

但通常StringBuilder优先于StringBuffer,因为对StringBuffer的访问是同步的。

答案 2 :(得分:1)

您可以,因为System.out.println会自动将其参数转换为String,从而产生StringBuffer的内容。当您需要迭代一组数据时,通常会使用它。

使用append方法,您可以将数据附加到缓冲区:

String[] values = { 'string value', 'testing' };
StringBuffer sb = new StringBuffer();
for(String value: values) {
    sb.append(value);
}

将导致 - > string valuetesting

注意:最好再考虑StringBuilder

答案 3 :(得分:1)

小字符串追加和concats通常看不到使用StringBuilder带来的好处,但请记住,字符串追加有3个操作,1个新的分配包括添加的两个字符串的大小,以及复制内容的2个复制操作(这意味着你现在在内存中有3个字符串),StringBuilder只需追加并调整大小到固定宽度的缓冲区,大多数时候只需要1个拷贝(有时是分摊的成本复制,有时候是你需要调整大小,需要2)。如果你要在1个字符串中添加很多内容,我建议使用StringBuilder,但对于像你这样的连接,你不应该看到性能损失(至少可以测量)。

答案 4 :(得分:1)

使用StringBufferStringBuilder的想法是避免重复串联字符串 如下所示:

String result = "";
for (int i = 0; i < 200; i++) {
    result = result + i + ",";
}

这不高效,在每个循环中,一个String对象是(java内部)创建的

使用StringBuilder / StringBuffer:

StringBuilder buf = new StringBuilder(200); // init with a estimation of length has advantage
for (int i = 0; i < 200; i++) {
    buf.append(i).append(",");
}
String result = buf.toString();

这可以避免在每个循环中不必要地创建字符串,它只是用字符填充缓冲区,并在需要时调整缓冲区的大小。

但是在你的情况下,这是不值得的。

答案 5 :(得分:0)

是的,你可以。像所有人都指出的那样,StringBuffer.toString()会将内容清除为String。你需要问自己的问题是,你真的关心你使用的是什么,或者你是否特别想要使用StringBuffer来学习一些东西。

对于您的手术,一个与另一个一样好。如果你真的想做你朋友告诉你的事情,我想这里的人们已经清楚地回答了这个问题。

或者你可以告诉你的朋友,“没关系。在我的情况下,一个和其他人一样好”:)

答案 6 :(得分:0)

获取建议使用StringBuffer的同步版本的字符串,其中线程安全性很高。对于非同步使用StringBuilder类,其中不需要线程安全性,我们的应用程序将提供更好的性能..