如所示 here,无法实现在运行时创建的字符串。
但是,以下代码:
class Program {
static void Main(string[] args)
{
string s1 = "Programming Is Fun";
string s3 = s1.ToString();
Console.WriteLine(Object.ReferenceEquals(s1, s3));
}
}
给出(VS 2015):
True
那么,它是否以某种方式指定了哪些字符串在运行时生成?
顺便说一句:
代码:
using System;
using System.Text;
class Program {
static void Main(string[] args)
{
string s1 = "hop";
StringBuilder s2 = new StringBuilder(s1);
string s3 = s2.ToString();
Console.WriteLine(Object.ReferenceEquals(s1, s3));
}
}
给出(VS 2015):
False
与mono(版本4.0.2)相反,给出了
True
请参阅working example。
答案 0 :(得分:4)
String.ToString()
返回对同一字符串的引用:
public override String ToString() {
Contract.Ensures(Contract.Result<String>() != null);
Contract.EndContractBlock();
return this;
}
可以实现在运行时创建的字符串。引用你引用的MSDN article:
运行时不保证在运行时创建的字符串被实现
实习是一项昂贵的操作,通常在运行时这样做太昂贵了。如果您想确保您的字符串是实习的,可以使用public static String Intern(String str)
方法。