您现在的位置是:首页 >

c++ string转int 对string类型和stringBuilder类型的研究

火烧 2021-04-29 00:30:31 1031
对 tri g类型和 tri gBuilder类型的研究   u i g Sy tem u i g Sy tem Collectio Ge eric u i g Sy tem Text    ame

对string类型和stringBuilder类型的研究  

  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 指向它的中间栈

c++ string转int 对string类型和stringBuilder类型的研究

  //假设这个中间栈叫stack 然后stack 再指向存放 test 的栈             //mySb 也指向它的中间栈stack 然后stack 也指向存放 test 的那个栈 当mySb 被修改时

  //依然是采用copy on write技术 但是开辟新的栈并且把修改后的数据放进去后             //会自动修改stack 让他重新指向新的数据栈 而mySb 一直还是指向中间栈stack

  //这样就实现了直接的修改 而不用使用 = 来传递新地址给mySb 看下面的测试             mySb Replace( t a );            Console WriteLine(mySb );            //果然 mySb 被成功修改了!            //Ps 以上代码虽然有些警告 但是可以运行 主要是专注于说明问题 忽略了一些细节 比如赋值了的变量未使用等问题 望见谅!

lishixinzhi/Article/program/net/201311/13532  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码