The string memory resident mechanism is illustrated in detail

  • 2020-05-30 21:00:17
  • OfStack


// Memory - resident mechanism for strings 
        public static void Test()
        {
            // When multiple string variables contain the same actual value of the string, 
            //CLR Instead of allocating memory to them repeatedly, you might want them all to point to the same thing 1 Two instances of a string object. 
            String s1 = "Hello";
            String s2 = "Hello";
            bool same = (object)s1 == (object)s2;// To compare 1 Under the s1 and s2 Whether the same 1 A reference 
            Console.WriteLine(same);             // This place is called true: Said the same 1 A reference   No new memory space is allocated 

            /*
             *  We know, String Class has a lot of special things about it 1 Is that it is "not going to change." (immutable) . 
             *  This shows that every time we are right 1 a String Object to operate on ( Such as using Trim . Replace Methods such as ) . 
             *  It's not really true about this String The instance of the object is modified and returned instead 1 A new one String Object instance as the result of operation execution. 
             * String Object instance 1 After generation, it will not be changed until death !
             */
            /* About resident pooling: it is a string that maintains which literals, but does not maintain the following type */
            StringBuilder sb = new StringBuilder();
            sb.Append("Hel").Append("lo");
            String s3 = "Hello";
            String s4 = sb.ToString(); // It's the same value but it's not the same value 1 A reference 
            bool same2 = ((object)s4 == (object)s3);
            Console.WriteLine(same2);
            /* Let the programmer force it CLR Check the resident pool ; See if you have the same string */
            StringBuilder sb2 = new StringBuilder();
            sb2.Append("He").Append("llo");
            string s5 = "Hello";
            string s6 = String.Intern(sb2.ToString());
            bool same3 = (object)s5 == (object)s6;
            Console.WriteLine(same3);
        }


Related articles: