.net 字符串和字符串生成器
NET中字符串和字符串生成器的区别是什么 基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多 您可能会在这篇文章中找到更好的讨论: 基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多 您可能会在这篇SO帖子中找到一些更好的讨论:。字符串是可变的,而stringbuilder是可变的 在面向对象和功能化方面 在编程中,不可变对象是 无法修改其状态的对象 在它被创建之后。这是在 与可变对象相比,可变对象 可以在创建后进行修改 不可变对象通常很有用 因为一些昂贵的手术 复制和比较可以省略, 简化程序代码和 加速执行。但是, 对象不可变通常是 如果对象包含 大量可变数据。 因此,许多语言允许 对于不可变和可变 对象 每次对字符串对象进行连接时,都会使用新引用创建一个新的字符串对象,并将其指定给该对象。较旧的对象仍将在内存中。字符串是可更改的,而stringbuilder是可更改的 在面向对象和功能化方面 在编程中,不可变对象是 无法修改其状态的对象 在它被创建之后。这是在 与可变对象相比,可变对象 可以在创建后进行修改 不可变对象通常很有用 因为一些昂贵的手术 复制和比较可以省略, 简化程序代码和 加速执行。但是, 对象不可变通常是 如果对象包含 大量可变数据。 因此,许多语言允许 对于不可变和可变 对象.net 字符串和字符串生成器,.net,string,stringbuilder,.net,String,Stringbuilder,NET中字符串和字符串生成器的区别是什么 基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多 您可能会在这篇文章中找到更好的讨论: 基本上,字符串是不可变的——每次操作字符串时,都需要在内存中重新创建一个字符串。StringBuilder在内存方面更容易,而且在几乎所有情况下,在处理重复的字符串连接和其他操纵操作时,都要快得多 您可能会在这篇SO帖子中
每次对字符串对象进行连接时,都会使用新引用创建一个新的字符串对象,并将其指定给该对象。较旧的对象仍将存在内存中。字符串是不可变的类型。当执行大量字符串操作(如串联)时,它的性能特性很差 另一方面,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());
}
}