不可变对象

✍ dations ◷ 2025-12-09 09:46:28 #程式设计小作品,面向对象的程序设计,函数式编程

在面向对象及函数编程语言中,不可变对象(英语:Immutable object)是一种对象,在被创造之后,它的状态(成员变量、属性等的值)就不可以被改变。至于状态可以被改变的对象,则被称为可变对象(mutable object)。

不可变意味着只读不写,因此不可变对象天然地具备线程安全的特性,即是说如无其它特殊限制的话可以在任何线程上自由调用。此外,相较于可变对象,不可变对象在一些场合下也较合理,易于了解,而且提供较高的安全性。

小型的不可变对象可以被有效率的复制,但是较大的不可变对象,如果想要有效率的被复制,就需要更复杂的一致性数据结构(persistent data structure)算法。因为性能的缘故,有时候会以可变对象来加以取代不可变对象。

典型的例子例如字符串对象:C++ STL 中的 std::basic_string<T> 是可变的,即可以修改一个 std::basic_string<T> 对象所表示的字符串;而 .net 中的 System.String 是不可变的,System.Text.StringBuilder 才像 std::basic_string<T> 一样可变。

相关

  • 氟伏沙明氟伏沙明(Fluvoxamine)是一种选择性5-羟色胺再吸收抑制剂(SSRI)型的抗抑郁药,其药物形态为马来酸氟伏沙明(Fluvoxamine Maleate),商品名为“兰释”(Luvox)。在临床上常用于抑郁症及相
  • 本生灯本生灯是科学实验室常用的高温加热工具之一。该工具以德国化学家罗伯特·威廉·本生的名字命名,而实际上是由他的助手彼得·迪斯德加(Peter Desaga)在1855年改良法拉第原先的一
  • 高碳富勒烯高碳富勒烯为多于70个碳原子组成的富勒烯分子,是六边形和五边形组合成的笼型稠环结构,多边形的每个顶点都有一个碳分子、每个边缘都有一个键结。1990年, W. Krätchmer 和 D.
  • 农艺学农学,狭义上专指农艺学(英语:Agronomy)是研究与农作物生产相关领域的科学,包括作物生长发育规律及其与外界环境条件的关系、病虫害防治、土壤与营养、种植制度、遗传育种等领域。
  • 动量守恒动量守恒定律(Conservation of momentum):如果物体系受到的合外力为零,则系统内各物体动量的矢量和保持不变,系统质心维持原本的运动状态。以用p表示动量,或者一般会表示成动量守
  • 附件睾丸附件(Appendix testis)是在人类泌尿生殖道,由穆勒氏管(英语:Müllerian duct)演化残存的痕迹器官。睾丸附件位于睾丸上半部,和鞘膜(英语:Tunica vaginalis)相接。90%的时间皆外露
  • 布罗克豪斯伯特伦·内维尔·布罗克豪斯(Bertram Neville Brockhouse,1918年7月15日-2003年12月13日),加拿大物理学家,1994年诺贝尔物理学奖获得者。布罗克豪斯出生于莱斯布里奇,1947年在不列
  • 东方4号48°9′N 71°51′E / 48.150°N 71.850°E / 48.150; 71.850东方四号是苏联太空计划的一部分。此飞船在东方三号仅发射一天后便升空,本船搭乘了太空人Pavel Popovich上天,并
  • 酸式焦磷酸钠酸式焦磷酸钠,化学式Na2H2P2O7。酸式焦磷酸钠是一种白色单斜结晶性粉末或熔融状固体,溶于水,不溶于乙醇。稍有吸湿性,吸水后形成六水合物。水溶液用稀酸加热则水解成磷酸。加热
  • 郑杲郑杲(1851年-1900年),字东父、东甫,直隶永平府迁安县(今河北省迁安县)人,清朝政治人物,同进士出身。郑杲父鸣冈,任山东即墨县知县,卒于官,家贫不能归里,于是寄籍当地。郑杲事母至孝。光绪