C# - String Clone() 和 Copy() 方法有什么区别

2 c# string

我想知道如果 Copy() 和 Clone() 方法执行相同的任务,它们之间有什么区别以及使用哪一个

根据我搜索到的内容,clone() 会创建一个新字符串,而 copy() 只是复制现有字符串并使用它

如果这是正确的,那么哪个更好

Dai*_*Dai 5

长话短说:

不要使用这两种方法:

  • Clone 实际上并没有做任何事情
  • Copy正式过时

ETC:

我将在回答前说,因为值是不可变的,所以使用 或并String没有太多(或任何?)好的理由。String.Clone()String.Copy

根据我搜索到的内容,创建clone()一个新字符串,然后copy()复制现有字符串并使用它

抱歉,您的理解不正确。

根据文档(重点是我的):

String.Clone() 不会创建字符串的副本,实际上它只是返回一个自引用:

https://learn.microsoft.com/en-us/dotnet/api/system.string.clone?view=net-6.0

返回值不是该实例的独立副本;这只是相同数据的另一种视图。使用CopyorCopyTo方法创建一个与此实例具有相同值的单独 String 对象。

因为该Clone方法只是返回现有的字符串实例,所以没有理由直接调用它

至于String.Copy()

https://learn.microsoft.com/en-us/dotnet/api/system.string.copy?view=net-6.0

Copy方法返回一个String与原始字符串具有相同值但表示不同对象引用的对象。

[...]

从 .NET Core 3.0 开始,此方法已过时。但是,我们不建议在任何 .NET 实现中使用它。特别是,由于 .NET Core 3.0 中字符串驻留的更改,在某些情况下,Copy 方法不会创建新字符串,而只是返回对现有驻留字符串的引用。

此外,因为String.Copy 可能会创建一个副本(取决于实习的工作方式),这意味着它是一个O(n)操作。