String和String Builder之间的区别(不是关于concatination)

时间:2015-04-27 08:01:09

标签: java string performance stringbuilder

是的,我已经阅读了互联网上有关其差异的所有资料。这种差异完全基于两者的连接性能。我的问题是在下面的代码中哪种技术更好。

public class StringBuilderDemo {

   public static void main(String[] args) {

      StringBuilder str = new StringBuilder("test");
      System.out.println(str.toString());

      str = new StringBuilder("Hi "); 
      System.out.println(str.toString());
  }
}

这是字符串演示

public class StringDemo {
    static String str="";
    public static void main(String[] args) {

       str = "test";
       System.out.println(str);

       str ="Hi"; 
       System.out.println(str);
   }
}

我的假设是因为字符串是不可变的所以当我们将“Hi”分配给str时,“test”也保留在内存中(字符串的两个对象创建“Hi”和“test”)。就像字符串构建器的情况一样,当我们给出值“Hi”“test”被删除。因此我们在字符串构建器的情况下有一个对象。所以我总结说在这些情况下我们应该使用字符串构建器。如果我在这里幼稚,请纠正我。

4 个答案:

答案 0 :(得分:1)

在您的情况下,普通String更好。你应该在大的for循环中使用StringBuilder,你要在字符串中添加很多东西。

问题是字符串 imutable ,当您将变量分配给字符串时,java会查看您已经创建的表格。如果存在具有相同内容的内容,则会获得对该String的引用。但是,无论何时链接String的内容,都会创建一个新对象,因此在大循环中性能会降低。

StringBuilder 并非如此,它是 mutable ,这意味着您可以修改它的对象并且不会创建新对象,而是只需在需要时自行调整大小。

答案 1 :(得分:1)

你是对的,String是不可变的。意味着您无法直接向其内存内容添加内容,这意味着您需要额外的内存来访问它。但是,您的应用程序似乎不会占用大量内存,因此您可以直接使用String。

答案 2 :(得分:0)

是的,当你加入更多的字符串或者你创建一个字符串时,隐藏着一个字符串生成器。

对于简单的字符串,性能没有区别,但是如果你需要连接(或添加)更多的字符串,你应该使用字符串生成器。

答案 3 :(得分:0)

这是非常基本的事情。你应该使用' String'不是' StringBuilder'在你的情况下。