不可变对象

✍ dations ◷ 2024-12-23 05:36:15 #程式设计小作品,面向对象的程序设计,函数式编程

在面向对象及函数编程语言中,不可变对象(英语: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> 一样可变。

相关

  • 共济失调毛细血管扩张症共济失调微血管扩张症候群是一种小脑运动失调疾病,常于3-6岁发病,并会有免疫不全、微血管扩张,以及容易发生癌症,对辐射的抗性亦有所下降。其发生率为1/40000至100000。遗传方面
  • 基底膜基底膜(英语:basement membrane)是位于上皮组织下的一层,无细胞且富含纤维的结缔组织,分隔上皮、间皮、内皮,通常位于体腔或器官表面,或是血管内皮的基底面。基底膜是由基底层(英语:b
  • 艾伦·谢泼德小艾伦·巴特雷特·谢泼德少将(英语:Alan Bartlett Shepard Jr.,1923年11月18日-1998年7月21日)是一位美国航天员、海军航空兵、试飞员,也是一位商人。他是美国国家航空航天局最早
  • 印度标准时间印度标准时间(Indian Standard Time - IST)是在印度全国使用的标准时间,即UTC+5:30。印度的标准时间以通过安拉阿巴德(北方邦城市)东边的东经82.5度做为基准,与格林威治标准时间相
  • 钱选钱选(1239年-1301年),字舜举,号玉潭,别号巽峰等,中国元代画家,吴兴(今浙江湖州)人,工青绿山水。桃枝松鼠图,国立故宫博物院藏浮玉山居图(局部),藏于中国上海博物馆宋太祖蹴鞠图,藏于中国上海
  • 德意志米歇尔德意志米歇尔(Deutscher Michel)是德国的拟人化形象,这个称呼起源于近代,而至今也仍然可以在讽刺画中找到。戴着典型的睡帽(英语:nightcap 德语:Schlafmütze )或者绒球帽的“德意志
  • 郑克臧郑克
  • 胡斯扬·胡斯(约翰·胡斯,捷克语:Jan Hus;1371年捷克胡西内兹 - 1415年7月6日德国康斯坦茨),也译作胡司,捷克基督教思想家、哲学家、改革家,曾任布拉格查理大学校长。胡斯思想上受到威克
  • 葛敦华葛敦华(1921年9月18日-2010年6月12日),中华民国海军中将,前中华民国国防部常务次长。中华民国总统府国策顾问。福建福州市人。
  • 本南族本南族是居住于砂拉越与文莱的游牧原住民。他们是现存少数的原住民之一。本南族以实践'molong'著称,亦即不说非必要的话。多数本南族直到二次大战后传教士进入前仍是游牧采集