Trying to understand strings better in C#

Are these assertions correct?

 - string is immutable
 - string is reference type but behaves like value type

For these code samples...
      
    string x = "one"   

(creates string instance holding "one" in memory)

    x = "two"   

(destroys "one" instance and creates new string instance holding "two" in memory, even though it is using the same variable x)


If the above are correct, what happens in a string array when one index value changes?

    string[] array = new string[2];

    array[0] = "boo";   (string "boo" created and held in 0 index)
    array[1] = "shoo";
    
    array[0] = "moo";  

 

Does the last assignment create an entire new array to change boo to moo? My best "guess" is that the array holds pointers so that array[0] simply points to the new string instance that holds "moo". Is this correct? If not, could someone please clarify, thanks.