不可变对象

✍ dations ◷ 2025-07-20 16:17:52 #程式设计小作品,面向对象的程序设计,函数式编程

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

相关

  • 核磁共振核磁共振(NMR,Nuclear Magnetic Resonance)是基于原子尺度的量子磁物理性质。具有奇数质子或中子的核子,具有内在的性质:核自旋,自旋角动量。核自旋产生磁矩。NMR观测原子的方法,是
  • 小苏打96 g/L (20 °C) 165 g/L (60 °C) 236 g/L (100 °C)碳酸氢钠(sodium bicarbonate、IUPAC名: sodium hydrogen carbonate、baking soda)是一种无机化合物,化学式为NaHCO3,俗称
  • 于成龙于成龙画像,清康熙四十五年(1706年)作于成龙(1617年-1684年),字北溟,号于山,明末清初山西永宁州(离石县)人。中国清朝官员,著名廉吏。明朝万历四十五年(1617年)出生,顺治十八年(1661年)出仕,历
  • 中小企业银行中小企业银行 (Industrial Bank of Korea (IBK);韩语:중소기업은행, KSE:024110SWIFT:IBKOKRSE)是韩国一所企业银行,总部位于首尔中区。银行于1961年成立,口号为"Fine Bank."。
  • 台北监狱围墙遗迹坐标:25°1′58″N 121°31′37.15″E / 25.03278°N 121.5269861°E / 25.03278; 121.5269861台北监狱围墙遗迹位于台北市大安区金山南路二段44巷(爱国东路底、金山南路交叉
  • 萨姆特堡萨姆特堡(英语:Fort Sumter)是位于美国南卡罗来纳州查尔斯顿港的一处石制防御工事,始建于1827年,以美国独立战争英雄托马斯·萨姆特将军的姓来命名。1861年4月12日,萨姆特堡遭到南
  • 帕特里克·莱希帕特里克·约瑟夫·莱希(英语:Patrick Joseph Leahy,/ˈleɪhiː/);1940年3月31日-) 美国民主党政治人物,是佛蒙特州的资深联邦参议员,自1975年起就在参议院代表佛蒙特州。莱希自201
  • 京都开城府京都开城府又称开京(개경)是10世纪到14世纪朝鲜半岛上存在的政权高丽(918年 - 1392年)的首都。位于现在北朝鲜(朝鲜民主主义人民共和国)的开城市。高丽时代4都为:开京、西京、东京
  • 赫尔曼·布尔哈夫赫尔曼·布尔哈夫(Herman Boerhaave)(1668年12月31日福尔豪特 – 1738年9月23日莱顿)是一位欧洲知名的荷兰植物学家,人文主义者和医生。他被视为临床教学以及现代学术医院的奠
  • 阿舒托什·慕克吉阿舒托什·慕克吉爵士CSI FASB FRSE FRAS MRIA(英国化名Sir Ashutosh Mukherjee,原名为孟加拉语:আশুতোষ মুখোপাধ্যায়,,或者英国化为 Asutosh Mookerjee(阿苏托