物件導向函式程式語言中,不可變物件(英語:Immutable object)是一種物件,在被創造之後,它的狀態(成員變數、屬性等的值)就不可以被改變。至於狀態可以被改變的物件,則被稱為可變物件(mutable object)。

不可變意味著唯讀不寫,因此不可變物件天然地具備執行緒安全的特性,即是說如無其它特殊限制的話可以在任何執行緒上自由呼叫。此外,相較於可變物件,不可變物件在一些場合下也較合理,易於了解,而且提供較高的安全性。

小型的不可變物件可以被有效率的複製,但是較大的不可變物件,如果想要有效率的被複製,就需要更複雜的可持久化資料結構演算法。因為效能的緣故,有時候會以可變物件來加以取代不可變物件。

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