当我们谈论字符串是可变的时,这是否与使用单词“可更改”或“可修改”同义,或者是否有一些额外的细微差别来解释为什么使用这个行话而不是像“可修改”这样更简单的词?
7 回答
我认为“可变”这个词是一个不错的选择。
如果您使用“可修改”,则不太清楚。例如,如果您的字符串是堆分配类型,当您说您正在修改“字符串”时,不清楚您是在更改堆上的数据(字符串的内容)还是字符串的堆指针。
但是,对我来说,“可变”表明字符串的实际数据正在发生变化。我认为这是因为它与变异的根源相同。如果某物正在变异,它不会从查看 A 变为查看 B(即:更改指针),而是自身发生变异,或者(迭代地)变成它最初不是的东西。
可变对象是在创建后可以修改的对象。所以在某种程度上,它是“可修改”的同义词。“可变”一词的意思是“有责任或可能发生变化或变更”。我认为这听起来比“可修改”更好。
是的,可变是指在创建后能够更改的对象,而不可变是指无法更改的对象。可变的字面意思是“变异的能力”,我认为这完全符合可变对象的行为方式。
- 可变的
- “有责任或可能发生变化或变更。”
- 可修改
- “在一定程度上改变其形式或性质;部分改变;”
反过来
- 不可变
- “不可变的;不变的;不变的”
- 不可修改
- “在形式、性格或力量上无法改变”
在编程中,您经常听到可变和不可变这两个术语,而不是可修改和不可修改。但是,我认为可以肯定地说,任何一种方式都具有相同的含义。
但是在罗马时......所以你应该使用 mutable 和 immutable 因为它们是更常用的术语(至少在我的经验中)。
至于为什么会这样选择?我问了我的岳母(她说的话:-),从非编程的角度来看,“可变”比“可修改”更短......对我来说似乎有足够的理由。
特别是关于字符串,在可变字符串中,如果将第一个字符从“A”更改为“B”,那么您仍然在处理内存中的相同字节;其中一个刚刚取了不同的值。使用不可变字符串,即在Java 中,新对象将在内存中的新位置创建,因为原始对象无法更改。
可变是一个合适的词来描述它,它的优点是没有加载现实世界的含义或解释,这使得它难以精确使用。
而且由于您没有指出您所说的具体上下文(如果这是范围蔓延,请原谅我)......
.NET 中的字符串特别是不可变的,而不是可变的。一旦它们被创建,就是这样。他们从不改变。如果进行了更改尝试,则会创建新字符串并释放旧字符串以进行垃圾收集。
下面是一个非常简单的可变/不可变解释,以 java 为例:
可变的
- 无需重新分配内存即可更改
StringBuffer api 文档是标准字符串类的可变版本
要更改 String 类的标准值,您需要重新分配内存
我从未真正听说过使用可修改一词。