最近一直纠结着String类型,一直想着这个问题:
代码
using System;
using System.Collections.Generic;
using System.Text;
namespace test
{
class Program
{
static void Main(string[] args)
{
string str1 = "aaa";
string str2 = str1;
str1 = "bbb";
Console.WriteLine(str1);
Console.WriteLine(str2);
Console.ReadKey();
}
}
}
大家先看一下代码。定义了一个str1,再定义一个str2,把str1赋值给str2,为什么修改了str1之后,str2的值不会改变呢?
一开始,我是认为str1和str2都是指向同一个引用的(事实上确实如此)。但是当我修改了str1的值为bbb之后,str2的值
竟然没有跟着改变,于是我就想,是不是他们一开始就不是指向同一个地址呢???一开始的str2=str1..是不是只是把str1的
值赋给str2指向的地址呢?
于是我上网查了查资料,原来,str1和str2一开始时指向同一个地址单元的,但是当str1的值改变之后,str1就会指向"bbb"
的内存地址,而不再指向"aaa"的地址了,所以输出str2的时候仍然是aaa。也就是str1="bbb"的时候,是不会修改str1所指向
的内存地址的值的,只会重新分配内存单元给新的String类型,这个也就是String的特点。