我一直想知道为什么JAVA和C#有String(immutable&threadsafe)类,如果它们有StringBuilder(mutable¬ threadsafe)或StringBuffer(mutable&threadsafe)类.上课不是StringBuilder/ StringBuffer超集String吗?我的意思是,String如果我选择使用StringBuilder/ ,我为什么要使用课程StringBuffer?
例如,而不是使用以下,
String str;
Run Code Online (Sandbox Code Playgroud)
为什么我不能总是使用以下?
StringBuilder strb; //or
StringBuffer strbu;
Run Code Online (Sandbox Code Playgroud)
简而言之,我的问题是,如果我String用StringBuffer类替换,我的代码将如何生效?此外,StringBuffer还增加了可变性的优势.
Jon*_*eet 16
我的意思是,如果我可以使用StringBuilder/StringBuffer,我为什么要使用String类?
正是因为它是不可改变的.不可变性有许多好处,主要是它使得更容易推理你的代码,而无需在任何地方创建数据副本"以防万一"某些东西决定改变价值.例如:
private readonly String name;
public Person(string name)
{
if (string.IsNullOrEmpty(name)) // Or whatever
{
// Throw some exception
}
this.name = name;
}
// All the rest of the code can rely on name being a non-null
// reference to a non-empty string. Nothing can mutate it, leaving
// evil reflection aside.
Run Code Online (Sandbox Code Playgroud)
不变性使分享变得简单而有效.这对多线程代码特别有用.它使得"修改"(即创建具有不同数据的新实例)更加痛苦,但在许多情况下这是绝对正常的,因为值在没有被修改的情况下通过系统.
不变性是特别为"简单"类型,例如字符串,日期,数字(有用BigDecimal,BigInteger等).它允许它们更容易在地图中使用,它允许简单的相等定义等.