二探String类型
引用C#本质论的一句话:字符串是不可变的
之前就已经看了这本书的前几章基础的东西,那时候觉得这句话没什么特别地方,于是就选择性掠过了。现在再一次回过头来
再读一遍的时候,又品味到了另一种深层的意思。
什么是不可改变的,就是String的变量当你在初始化它的时候,它就是这个值,这个内存地址单元里面放的就是这个值,永远
不会改变。下面看这段代码:
代码
using System;
using System.Collections.Generic;
using System.Text;
namespace test
{
class Program
{
static void Main(string[] args)
{
string str1 = "aaa";
str1.ToUpper();
Console.WriteLine(str1);
Console.ReadKey();
}
}
}
结果大家觉得是什么??是AAA???如果这样想的话就是没有理解开头的那句话了。答案仍然是aaa。
str1.ToUpper();这段代码,只会在内存中开辟一段空间存储AAA,但是他并没有将这个值赋给str1,如果需要改变str1的值,则
str1=str1.ToUpper();这样才可以,但是这时候str1已经不是指向aaa这个值的内存地址了,而是指向AAA的内存单元。
总的来说,每次更新str1的值,也就是重新开辟一段空间存储新的字符串,之后把这个字符串的地址赋给str1。