不可变对象

✍ dations ◷ 2024-09-20 05:30:35 #程式设计小作品,面向对象的程序设计,函数式编程

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

相关

  • 恐慌发作恐慌发作(Panic attack)的意义为患者在强烈恐惧下,表现出一系列的身心症状。(常见换气过度或气喘)当恐慌发作,患者会感受到强烈不适,因此常求助于急诊室。一个人在一生中可能出现极
  • 基本粒子粒子物理学中,基本粒子(英语:elementary particle)是组成物质最基本的单位。其内部结构未知,所以也无法确认是否由其它更基本的粒子所组成。随着物理学的不断发展,人类对物质构成
  • 冲脉衝脉(又名冲脉),奇经八脉之一,“冲”者“道路”也,有四通八达之意,为十二经之所注;《灵枢·逆顺肥瘦》:“夫冲脉者,五脏六腑之海也,五脏六腑皆禀焉。”起源于小腹内起始,下出于会阴部,接
  • 网状纤维网状纤维(英文为Reticular fibers、reticular fibres或reticulin)是一类由网状细胞分泌的网状纤维组成的结缔组织。网状纤维相互交联形成精巧的网状结构,这样的结构蛋白叫做网
  • 昆比恩昆比恩(Queanbeyan)是澳洲新南威尔士州南部高原地区的城市,位于新南威尔士州的东南部。是昆比恩市议会的所在地。2006年人口为34,084人。昆比恩在面积较小的澳洲首都特区(全境在
  • 酒石酸钾钠酒石酸钾钠(化学式:NaKC4H4O6·4H2O),也称酒石酸钠钾、罗氏盐、罗谢尔盐,是酒石酸钠与酒石酸钾形成的复盐。它是无色至蓝白色正交晶系晶体,可溶于水,微溶于醇,味咸而凉,水溶液呈微碱
  • 韦特莫里森·雷米克·韦特(Morrison Remick "Mott" Waite,1816年11月29日-1888年5月23日),是一名来自俄亥俄州的律师、法官和政治家。于1874年至1888年任美国最高法院首席大法官。在
  • 有机钙化学有机钙化学是研究碳-钙键的化合物的化学分支。金属钙和卤代烃反应,可以得到RCaX,在反应中通常会先加入碘、镁或将钙制成汞齐来活化。用氯代烃和溴代烃反应的产率都较低。用二
  • Haru安倍春野(日语:あべ はるの ,2000年02月21日-),艺名Haru(朝鲜语:하루),韩国女子组合Nature的日本成员。身高161cm,体重41Kg。
  • 列弗·里维夫列弗·阿夫涅洛维奇·里维夫(俄语:Лев Авнерович Леваев;1956年7月30日,出生于乌兹别克塔什干),以色列商人 ,为布哈里犹太背景的慈善家与投资者。根据福布斯杂