【面向对象】可变对象和不可变对象
生活随笔
收集整理的這篇文章主要介紹了
【面向对象】可变对象和不可变对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在面向對象的系統中,存在可變對象(mutable)和不可變對象(immutable)兩種對象,本文基于Java語言進行對比分析。
顧名思義,可變對象是創建之后狀態可以改變的對象,不可變對象則是創建之后狀態不可改變的對象。
一個對象包含的內部使用的屬性改變了,但從外部看對象的狀態并沒有改變,例如一個使用Memoization來緩存復雜計算結果的對象仍然被看作是不可變對象。
不可變對象有幾個優點:
- 線程安全
- 易于理解
- 比可變對象有更高的安全性
在面向對象編程中,String以及其他的具體對象都被看作是不可變對象,以提高可讀性和運行效率。
盡管String類聲明中沒有提供讓它成為不可變對象的語法,但是String類沒有提供方法去改變一個String包含的數據,而是返回一個新的對象,這就使得它是不可變的。
Java中關鍵字final用于聲明原始數據類型和對象引用為不可變對象,但是它不能使對象本身變為不可變對象。
- 原始數據類型變量(int, long, short等)定義之后還可以再重新賦值,可以使用final阻止這樣的賦值。
- 僅僅使用final關鍵字還不能讓引用類型(reference types)成為不可變對象,final只能阻止重新賦值。
原始類型包裝類(Integer、Long、Short、Double、Float、Character、Byte、Boolean)也都是不可變的。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【面向对象】可变对象和不可变对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算机组成原理】双端口RAM和多模块存
- 下一篇: 为什么`malloc`出来的内存也能当成