不可变对象

✍ dations ◷ 2025-10-03 13:35:11 #程式设计小作品,面向对象的程序设计,函数式编程

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

相关

  • 厚壁菌门见内文厚壁菌门(学名:Firmicutes)是一大类细菌,多数为革兰氏阳性,有细胞壁的结构。少数,如柔膜菌纲(Mollicutes)(如支原体),缺乏细胞壁而不能被革兰氏方法染色,但也和其余的革兰氏阳性菌
  • 波尔丁县保尔丁县(Paulding County, Georgia)是美国乔治亚州西北部的一个县。面积1,077平方公里。根据美国2000年人口普查,共有人口81,678人,2005年增至112,411人。县治达拉斯(Dallas)。成
  • 混合动力车混合动力车辆是使用两种或以上能量来源驱动的车辆,而驱动系统可以有一套或多套。常用的能量来源有燃油、电池、燃料电池、太阳能电池、压缩气体等,而常用的驱动系统包含内燃机
  • 葛均波葛均波(1962年11月-),山东五莲人,中国心血管病学家,同济大学副校长,复旦大学附属中山医院教授。1984年毕业于青岛医学院,1987年获山东医科大学硕士学位,1993年于德国美因茨大学获博士
  • 饶毅饶毅(1962年2月28日-),江西人,著名生物学家。北京大学终身讲席教授、北京大学校务委员会副主任。他于1991年在加州大学旧金山分校(UCSF)获得神经科学博士学位,之后在哈佛大学担任博
  • 黄昏鸟目黄昏鸟目(学名:Hesperornithes)是生活于白垩纪已经灭绝,而且具有牙齿的鸟类,主要生活在北半球的海域与近海地区,以鱼类及其他海洋生物为主食。虽然有一些体型较小的种类可能具有飞
  • 光圈光圈(英语:Aperture),是照相机上用来控制镜头孔径大小的部件,以控制景深、镜头成像素质、以及和快门协同控制进光量。对于已经制造好的镜头,不能随意改变镜头的直径,但是可以通过在
  • 萨摩亚群岛萨摩亚群岛(英语:Samoan Islands 或 Samoa Islands,旧称Navigators' Islands)位于南太平洋,是波里尼西亚的一部分。约当南纬13°-15°、西经168°-173°之间,人口约250,000,主要是
  • 外套外套或称作褂、外褂,是穿在最外的上半身服装,有着大体积、长袖,以钮扣、拉链或腰带束起,在穿着时可覆盖上身的其他衣服,一般用作保暖或抵挡雨水的用途。大衣(Coat)是穿在一般衣服外
  • 1998年国际足联世界杯外围赛 (欧洲区)1998年国际足联世界杯外围赛 (欧洲区)是决定欧洲球队参加1998年国际足联世界杯足球赛资格的赛事。法国因主办国率先入围。49 队将分成 9 组,分组第一和最佳小组第二名直接晋