如圖所示 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
在相反
到單聲道其給出
True
(版本4.0.2)。
請參閱working example。
's3'是引用與s1'相同的字符串的變量,'s1.ToString()'只返回'this',所以它不會創建新的字符串。 [MSDN](https://msdn.microsoft.com/en-us/library/8tc6ws5s(V = vs.110)的.aspx)。 –
'string.ToString()'什麼都不做。它返回對原始字符串的引用。 'StringBuilder.ToString()'將生成一個字符串並返回其引用。生成過程可能會有所不同,如果在單聲道中沒有對「StringBuilder」進行更改,它可能只是簡單地返回對原始字符串的引用。 – Sinatr
順便說一句。如果您從MSDN鏈接中刪除「pl-pl /',則每個人都將以他們的(UI)語言獲得該文章的版本。 - (或默認爲en-US) – Corak