string的创建

string为引用类型,但是他的创建是特殊的,
他直接赋值的话,是现在内存中去寻找有没有一样的,当有的情况下则是讲地址赋值过去,当没有一样的则会重新去内存中创建一个
代码如下:

        static void Main(string[] args)
        {
            string s1 = new string("1");

            string s2 = "1";

            string s3 = "1";

            string s4 = new string("1");

            string s5 = "2";



            var addr1 = getMemory(s1);
            var addr2 = getMemory(s2);
            var addr3 = getMemory(s3);
            var addr4 = getMemory(s4);
            var addr5 = getMemory(s5);

            s3 = "2";
            var addr6 = getMemory(s3);

            Console.WriteLine($"地址1:{addr1} 地址2:{addr2} 地址3:{addr3} 地址4:{addr4} 地址5:{addr5} 地址6:{addr6}");


        }

        public static string getMemory(object o) // 获取引用类型的内存地址方法    
        {
            // GCHandle h = GCHandle.Alloc(o, GCHandleType.WeakTrackResurrection);
            //IntPtr addr = GCHandle.ToIntPtr(h);
            GCHandle h = GCHandle.Alloc(o, GCHandleType.Pinned);
            IntPtr addr = h.AddrOfPinnedObject();


            return "0x" + addr.ToString("X");
        }

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值