【问题标题】:Difference between String and String Builder (not about concatination) [duplicate]String 和 Stringbuilder 之间的区别(不是关于连接)[重复]
【发布时间】:2015-07-05 13:57:17
【问题描述】:

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

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”被删除。所以在字符串生成器的情况下我们只有一个对象。所以我得出结论,在这些情况下我们应该使用字符串生成器。如果我在这里很幼稚,请纠正我。

【问题讨论】:

  • "new StringBuilder("test")" 创建一个 String 对象 ("test"),StringBuilder 将其转换为一个 char 数组(从内存中),所以在这种情况下,我会说创建一个StringBuilder 比简单地使用“test”更昂贵(至少两个对象)
  • 当您执行 strBuild.toString 并创建新的 Strig 时......所以如果它仅对大型应用程序有用......如果您经常使用 toString,小型项目不会节省太多
  • 我有一个大型应用程序,我在其中使用字符串来分配和更改值。我应该使用字符串还是某人。
  • 顺便说一句,我理解你的观点,tostring 本身是偏移的,最好避免它。谢谢

标签: java string performance stringbuilder


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在您的情况下,普通的String 更好。您应该在大型 for 循环中使用 StringBuilder,在其中向字符串添加大量内容。

    问题是 String不可变的,当您将变量分配给字符串时,java 会查看您可以想象的已经创建的表。如果有一个内容相同,您将获得对该字符串的引用。但是,每当您链接 String 的内容时,都会创建一个新对象,因此在大循环中性能会变慢。

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

    【讨论】:

    • 还应该注意,编译器可以用 StringBuilder 替换 String 的使用(与连接有关)
    【解决方案3】:

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

    对于简单的字符串,性能没有差异,但如果您需要连接(或添加)更多字符串,则应使用字符串生成器。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2012-09-09
        • 2011-11-08
        • 1970-01-01
        相关资源
        最近更新 更多