知识大全 对string类型和stringBuilder类型的研究
Posted 类型
篇首语:知识为进步之母,而进步又为富强之源泉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 对string类型和stringBuilder类型的研究相关的知识,希望对你有一定的参考价值。
对string类型和stringBuilder类型的研究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
using System;using System Collections Generic;using System Text;
namespace TestString class Program static void Main(string[] args) //在一次群组讨论中 谈到了string的类型问题 虽然它是引用类型 却具有很多值类型的特点 关于这个问题 做了如下研究 //由于程序中可能存在大量的相同字符串 为了节省内存 C#应该是将下面两个变量都引用存放在同一个栈的 test ! string myString = test ; string myString = myString ; //那么按照引用的理论 修改其中的一个字符串 另一个就应该跟着改变 例如做如下修改 myString = New test ; Console WriteLine(myString ); //此时按理说myString 应该也变成 New test 但事实上经过测试 myString 还是 test 这是为什么呢? //我分析 微软应该是在string类型中引入了copy on write技术 就是说 我们在修改string类型变量的时候
//其实是重新开辟了一块内存 将修改后的内容放进去 //再利用 = 把修改后的数据所在栈的地址传给被修改的字符串变量 来达到修改字符串变量的目的! //下面的测试很好的说明了这个问题 myString Replace( t a ); Console WriteLine(myString ); //myString Replace( t a );方法是把该字符串中的字母t换成字母a 但是经过测试myString 的内容依然是 test
//这就是因为虽然开辟了新空间并且将修改后的值存了进去 //但是没有用 = 将新数据栈的地址传给myString
所以myString 的值没变!
//与string类型相对应 StringBuilder类型则有所不同 StringBuilder mySb = new StringBuilder( test ); StringBuilder mySb = new StringBuilder( test ); //StringBuilder类型在引用存放数据的栈之前加入了一个中间栈 也就是说 mySb 指向它的中间栈
//假设这个中间栈叫stack 然后stack 再指向存放 test 的栈 //mySb 也指向它的中间栈stack 然后stack 也指向存放 test 的那个栈 当mySb 被修改时
//依然是采用copy on write技术 但是开辟新的栈并且把修改后的数据放进去后 //会自动修改stack 让他重新指向新的数据栈 而mySb 一直还是指向中间栈stack
//这样就实现了直接的修改 而不用使用 = 来传递新地址给mySb 看下面的测试 mySb Replace( t a ); Console WriteLine(mySb ); //果然 mySb 被成功修改了! //Ps 以上代码虽然有些警告 但是可以运行 主要是专注于说明问题 忽略了一些细节 比如赋值了的变量未使用等问题 望见谅!
cha138/Article/program/net/201311/13532相关参考
在msdn上 值类型主要由两类组成 结构 枚举 结构分为以下几类 Numeric(数值)类型 整型 浮点型 decimal bool 用户定义的结构 也就是string属于引
知识大全 Java中的String、StringBuffer和Math类
Java中的String、StringBuffer和Math类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
知识大全 String和stringBuffer类字符串的区别
String和stringBuffer类字符串的区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 编写类String 的构造函数、析构函数和赋值函数
编写类String的构造函数、析构函数和赋值函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!已知
publicclassChenqiArray /** *@paramargs */ publicstaticvoidmain(String[]args) //TODOAutogene
Java当中的String数据类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java中St
全面解析Java中的String数据类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先Str
在.NET程序中正确使用String类型[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
在.NET程序中正确使用String类型[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
对非String类型进行校验时的出错处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关于Spri