1、string是引用类型,在堆中分配内存
2、string不可修改,所谓的修改其实是生成了一份新的字符串,其内存地址已发生变化
3、以下创建字符串的方式会查询暂存池
- 利用字面量值创建string对象,string test = "aaa";
- 利用string.Intern()创建string对象,string test = string.Intern(str);
- 字面量值+字面量值拼接创建string对象,string test = "aaa" + "bbb";
- 只有编译阶段的文本字符常量会被自动添加到暂存池
- string.Intern()可以把动态创建的字符串加入到暂存池中
4、特例,下例中a、b引用地址相同,其他情况产生的字符串地址不同
char[] aa = { '1', '2' }; string a = aa.ToString(); string b = aa.ToString();