物件导向函数程式语言中,不可变物件(英语:Immutable object)是一种物件,在被创造之后,它的状态(成员变量、属性等的值)就不可以被改变。至于状态可以被改变的物件,则被称为可变物件(mutable object)。

不可变意味着只读不写,因此不可变物件天然地具备执行绪安全的特性,即是说如无其它特殊限制的话可以在任何线程上自由调用。此外,相较于可变物件,不可变物件在一些场合下也较合理,易于了解,而且提供较高的安全性。

小型的不可变物件可以被有效率的复制,但是较大的不可变物件,如果想要有效率的被复制,就需要更复杂的可持久化数据结构演算法。因为效能的缘故,有时候会以可变物件来加以取代不可变物件。

典型的例子例如字符串对象:C++ STL 中的 std::basic_string<T> 是可变的,即可以修改一个 std::basic_string<T> 对象所表示的字符串;而 .net 中的 System.String 是不可变的,System.Text.StringBuilder 才像 std::basic_string<T> 一样可变。