在Java中String 和StringBuffer有什么区别?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

在Java中字符串和StringBuffer有什么区别?

字符串有最大大小吗?

提问于
用户回答回答于

String用于操作不能更改的字符串(只读和不可变)。

StringBuffer用于表示可以修改的字符。

从性能上讲,StringBuffer在执行连接时更快。这是因为当您连接一个String之后,每次都要创建一个新对象(内部)。StringBuffer是不变的。

您也可以使用StringBuilder它类似于StringBuffer只是它不是同步的。其中任何一个的最大大小是Integer.MAX_VALUE(231-1=2,147,483,647)或最大堆大小除以2

用户回答回答于

运行以下测试代码,将看到差异。

Concat with String took: 1781ms
Concat with StringBuffer took: 0ms
public class Concat
{
    public static String concatWithString()
    {
        String t = "Cat";
        for (int i=0; i<10000; i++)
        {
            t = t + "Dog";
        }
        return t;
    }
    public static String concatWithStringBuffer()
    {
        StringBuffer sb = new StringBuffer("Cat");
        for (int i=0; i<10000; i++)
        {
            sb.append("Dog");
        }
        return sb.toString();
    }
    public static void main(String[] args)
    {
        long start = System.currentTimeMillis();
        concatWithString();
        System.out.println("Concat with String took: " + (System.currentTimeMillis() - start) + "ms");
        start = System.currentTimeMillis();
        concatWithStringBuffer();
        System.out.println("Concat with StringBuffer took: " + (System.currentTimeMillis() - start) + "ms");
    }
}

扫码关注云+社区

领取腾讯云代金券