String对象的值是只读的,任何貌似对String对象的值进行写操作的行为,实际上都不是在对原String对象进行写操作,而是在堆上创建了一个新的String对象实例。
字符串是 Unicode 字符的有序集合,用于表示文本。
String 对象是
System.Char 对象的有序集合,用于表示字符串。
String 对象的值是该有序集合的内容,并且该值是不可变的。
String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看上去似乎修改了String 对象的方法实际上是返回一个包含修改内容的新String 对象。如果需要修改字符串对象的实际内容,请使用System.Text.StringBuilder 类。
看下面的代码
void Start ()
{
string str1 = "wang";//创建一个string对象"字符串1",其中存储“wang”,并使引用变量str1指向它。
string str2 = str1;//引用变量str2也指向对象“字符串1”。
str1 = "yang";//创建一个新的string对象“字符串2”,其中存储“yang”,并使引用变量str1指向它。str1指向“字符串2”,不再指向“字符串1”
Debug.Log(str2);//str2仍然指向“字符串1”
}
最终输出字符串“wang”。
另外
function ConcatExample(intArray: int[]) {
var line = intArray[0].ToString();
for (i = 1; i < intArray.Length; i++) {
line += ", " + intArray[i].ToString();
}
return line;
}
在这里,每一次循环时,line这个引用变量都会指向一个新的string对象,那么line之前所指向的对象就死掉了(因为没有一个引用变量指向它,我们将没有任何办法使用到它)