Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 字符串和字符串生成器_.net_String_Stringbuilder - Fatal编程技术网

.net 字符串和字符串生成器

.net 字符串和字符串生成器,.net,string,stringbuilder,.net,String,Stringbuilder,NET中字符串和字符串生成器的区别是什么 基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多 您可能会在这篇文章中找到更好的讨论: 基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多 您可能会在这篇SO帖子中

NET中字符串和字符串生成器的区别是什么

基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多

您可能会在这篇文章中找到更好的讨论:

基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多

您可能会在这篇SO帖子中找到一些更好的讨论:。

字符串是可变的,而stringbuilder是可变的

在面向对象和功能化方面 在编程中,不可变对象是 无法修改其状态的对象 在它被创建之后。这是在 与可变对象相比,可变对象 可以在创建后进行修改

不可变对象通常很有用 因为一些昂贵的手术 复制和比较可以省略, 简化程序代码和 加速执行。但是, 对象不可变通常是 如果对象包含 大量可变数据。 因此,许多语言允许 对于不可变和可变 对象

每次对字符串对象进行连接时,都会使用新引用创建一个新的字符串对象,并将其指定给该对象。较旧的对象仍将在内存中。

字符串是可更改的,而stringbuilder是可更改的

在面向对象和功能化方面 在编程中,不可变对象是 无法修改其状态的对象 在它被创建之后。这是在 与可变对象相比,可变对象 可以在创建后进行修改

不可变对象通常很有用 因为一些昂贵的手术 复制和比较可以省略, 简化程序代码和 加速执行。但是, 对象不可变通常是 如果对象包含 大量可变数据。 因此,许多语言允许 对于不可变和可变 对象


每次对字符串对象进行连接时,都会使用新引用创建一个新的字符串对象,并将其指定给该对象。较旧的对象仍将存在内存中。

字符串是不可变的类型。当执行大量字符串操作(如串联)时,它的性能特性很差

另一方面,StringBuilder通过保持一个不断增长的缓冲区来克服这个缺点,这样每次连接都不太可能需要分配一个新字符串

由于字符串生成器会增加一些开销,因此只有在一些重要的字符串工作需要完成时(例如在循环中),它们才是真正必要的。如果你的代码很快,不用担心。如果不是,请使用探查器查看此问题在您的案例中是否重要


最后一点注意:这个答案实际上与ASP.NET无关——这适用于所有.NET和许多其他语言中的字符串

字符串是不可变的类型。当执行大量字符串操作(如串联)时,它的性能特性很差

另一方面,StringBuilder通过保持一个不断增长的缓冲区来克服这个缺点,这样每次连接都不太可能需要分配一个新字符串

由于字符串生成器会增加一些开销,因此只有在一些重要的字符串工作需要完成时(例如在循环中),它们才是真正必要的。如果你的代码很快,不用担心。如果不是,请使用探查器查看此问题在您的案例中是否重要


最后一点注意:这个答案实际上与ASP.NET无关——这适用于所有.NET和许多其他语言中的字符串

我想从Java的角度回答你的问题,尽管.Net中的概念是相同的。在Java中,我们有一个packagea包是一个名为Java.lang的类集合,String和StringBuilder是属于这个包的两个类,其他类可以使用它们来创建实例。现在,b/w字符串和字符串生成器的区别在于字符串对象是不可变的,这意味着这些对象的内容不能修改,因为它们是常量,而StringBuilder类的对象是可变的,这意味着它们的内容可以修改

例:-

Ref变量S1的HashcodeValue随附加的字符串而更改,但Ref变量S2的value值未更改


我想从Java的角度回答你的问题,尽管.Net中的概念是相同的。在Java中,我们有一个packagea包是一个名为Java.lang的类集合,String和StringBuilder是属于这个包的两个类,其他类可以使用它们来创建实例。现在是b/w字符串的差异 字符串生成器是字符串对象是不可变的,这意味着这些对象的内容不能修改,因为它们是常量,而StringBuilder类的对象是可变的,这意味着它们的内容可以修改

例:-

Ref变量S1的HashcodeValue随附加的字符串而更改,但Ref变量S2的value值未更改


我认为你的最后一段实际上比所有的“真实”答案更重要。我认为你的最后一段实际上比所有的“真实”答案更重要
package anypackagename;

    package learningJava;

    public class DemoString 
    {
          public static void main(String... args) 
          {
            StringBuilder S2 = new StringBuilder("My name is");  
            System.out.println("S2 is: "+S2 );
            System.out.println("Hashcode of S2 before append "+ S2.hashCode());
            String S1 = "I live in";
            System.out.println("S1 is: "+S1 );
            System.out.println("Hashcode of S1 before concat "+ S1.hashCode());
            diff(S1,S2);
          }

          public static void diff(String S1, StringBuilder S2)
         {
              System.out.println("\n" );
              S2 = S2.append(" Amritansh Upadhyay");
              System.out.println("S2 is: "+S2 );
              System.out.println("Hashcode of S2 after after " +S2.hashCode());
              S1 = S1.concat("Bangalore");
              System.out.println("S1 is: "+S1 );
              System.out.println("Hashcode of S1 after concat" +S1.hashCode());
         }
    }