不可变对象

✍ dations ◷ 2025-09-04 18:26: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> 一样可变。

相关

  • 锡-121m锡-121m是指锡-121的核同质异能素,可能的核素有:
  • 经济、社会、文化权利国际公约《经济、社会及文化权利国际公约》(ICESCR)又称“A公约”,是第2200A (XXI)号决议,它承诺其缔约方致力于向非自治领土和托管领土和个人授予经济、社会、文化权利,包括劳动权和健康
  • 亚历山大·瓦尔沙夫斯基亚历山大·瓦尔沙夫斯基(英语:Alexander Varshavsky,1946年11月8日-),俄裔美国生物化学家,加州理工学院教授。通过对酵母和高等生物的细胞培养的遗传学研究,瓦尔沙夫斯基阐明了从事
  • 亚氯酸盐亚氯酸盐是亚氯酸形成的盐类,含有亚氯酸根离子—ClO2−,其中氯的氧化态为+3。氯具有多变的氧化态,−1、+1、+3、+5和+7氧化态的简单或含氧酸根阴离子分别为:Cl−、ClO−、ClO2−
  • 哲尔哲尔(Djer),古埃及第一王朝(约公元前3100年)第二任或第三任法老。哲尔的荷鲁斯名解作“救助人的荷鲁斯”(Horus who succours)。在阿拜多斯王名表上,第二任法老的名字为“特提”(Teti
  • 索恩基普·斯蒂芬·索恩(英语:Kip Stephen Thorne,1940年6月1日- )是美国理论物理学家,主要贡献是在引力物理和天体物理学领域。索恩和英国物理学家斯蒂芬·霍金,以及美国天文学家、科
  • 塞赫姆卡拉塞赫姆卡拉(英语:Sekhemkare),埃及第十三王朝国王。据《都灵王表》记载,他在位6年。他统治时期的一座纪念碑上的几块被保存下来。他的名字还刻在尼罗河第二瀑布地区的努比亚尤龙
  • 医生游戏医生游戏或看医生游戏是用来描述孩子们互相检查彼此的生殖器官的一个词组。 它起源于孩子们之间假扮医生或病人来进行检查的游戏。然而,无论它是否涉及角色扮演,这种说法一直
  • 凤凰岭道院凤凰岭道院位于山东省东平县斑鸠店镇岱程村西,是一处道教建筑遗迹,为县级文物保护单位。道院南北85米,东西35米。始建年代不详。
  • 梁守槃梁守槃(1916年4月13日-2009年9月5日),福建省福州市人,中国科学院院士,中国著名导弹总体和火箭技术专家,中国导弹与航天技术的重要开拓者之一。中国第一枚液体燃料短程弹道导弹、“