zoukankan      html  css  js  c++  java
  • c# string

    string最为显著的一个特点就是它具有恒定不变性:我们一旦创建了一个string,在managed heap 上为他分配了一块连续的内存空间,我们将不能以任何方式对这个string进行修改使之变长、变短、改变格式。所有对这个string进行各项操作(比如调用ToUpper获得大写格式的string)而返回的string,实际上另一个重新创建的string,其本身并不会产生任何变化。 
    string   对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。有的时候看来似乎修改了,实际是string经过了特殊处理,每次改变值时都会建立一个新的string对象,变量会指向这个新的对象,而原来的还是指向原来的对象,所以不会改变。这也是string效率低下的原因。

     class Program
        {
            string str = "class.str";
            private int i = 0;
            static void StringConvert(string str)
            {
                str = "string being converted";
            }
            static void StringConvert(Program c)
            {
                c.str = "string being converted";
            }
            static void Add(int i)
            {
                i++;
            }
            static void AddWithRef(ref int i)
            {
                i++;
            }
            static void Main(string[] args)
            {
                int i1 = 10;
                int i2 = 20;
                string str = "str";
                Program c = new Program();
                Add(i1);
                AddWithRef(ref i2);
                Add(c.i);
                StringConvert(str);
                StringConvert(c);
    
                Console.WriteLine(i1);
                Console.WriteLine(i2);
                Console.WriteLine(c.i);
                Console.WriteLine(str);
                Console.WriteLine(c.str);
                Console.ReadLine();
            }
        }
    
      输出: 10   21   0     str    string being converted
    using System.Runtime.InteropServices;
        using System;
        namespace ConsolePrototype
        {
            public class A
            {
                public string str1 = "aaa";
                public string str2 = "aaa";
            }
            public class B
            {
                public string str1 = "aaa";
            }
            class Program
            {
                static void Main(string[] args)
                {
                    A a = new A();
                    GCHandle hander = GCHandle.Alloc(a.str1);
                    var pin = GCHandle.ToIntPtr(hander);
    
                    GCHandle hander2 = GCHandle.Alloc(a.str2);
                    var pin2 = GCHandle.ToIntPtr(hander);
    
                    B b = new B();
                    GCHandle hander3 = GCHandle.Alloc(b.str1);
                    var pin3 = GCHandle.ToIntPtr(hander3);
    
                    Console.WriteLine(pin);
                    Console.WriteLine(pin2);
                    Console.WriteLine(pin3);
                    Console.ReadLine();
                }
            }
        }

  • 相关阅读:
    获取汉字和字母的长度
    JavaScript 获取对象中第一个属性
    JS函数的length属性
    原型模式 -- JavaScript语言的灵魂
    建造者模式
    阻止form元素内的input标签回车提交表单
    工厂方法模式(安全的工厂方法)
    微信自研生产级paxos类库PhxPaxos实现原理介绍
    图解分布式一致性协议Paxos
    Paxos协议超级详细解释+简单实例
  • 原文地址:https://www.cnblogs.com/chengjunwei/p/7490742.html
Copyright © 2011-2022 走看看