国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java中的Immutable Class

2019-11-17 04:03:00
字體:
供稿:網(wǎng)友
還記得我們?yōu)槭裁葱枰狾bject.clone()和Cloneable接口么,簡單的說就是為了避免別名效應(yīng)帶來的負(fù)面影響。另外一種解決方案就是設(shè)計自己的Immutable Class。相信只要使用過java的人都用過Immutable Class,只是可能你不知道它屬于Immutable Class而已。比如所有基本類型對應(yīng)的Wrapper Class,Integer、Long、Float,還有最常見的String類。

Immutable Class的特點
Immutable Class最主要的特點就是對象本身一旦創(chuàng)建不可修改。剛一聽你可能覺得這個概念好像和final關(guān)鍵字很像,但實際上final定義的“對象”其實是對象引用而不是對象本身。那么如何做到讓一個Immutable對象不能被修改呢,最簡單直接的辦法就是讓Immutable Class沒有修改實例變量(instance variables)的public方法??赡苣銜幸蓡枺涸贘ava類庫中String類有很多貌似改變對象本身的public方法,比如concat()、subString()、replace(),為什么它也是Immutable Class?其實對于這些貌似修改了對象本身的方法,都有一個相同點,它們的返回值類型也都是String類型的,返回的值并不是原來的對象,而是新產(chǎn)生的一個String對象。

Immutable Class的缺點
以String為例,如果有如下代碼:

String s = new String("abcdef");

s = s.toUpperCase();

很顯然,引用s最初指向String對象"abcdef",然后又指向String對象"ABCDEF",那么String對象"abcdef"就可以被垃圾回收了。可以想象如果不斷的進行這樣貌似改變對象本身的操作,將會不斷的創(chuàng)建新對象,丟棄舊對象。這一定會降低效率、增加開新。Java是這樣解決這個問題的:為String類添加一個伴隨類(companion class)StringBuffer,StringBuffer是可以改變對象本身的Mutable Class,String和StringBuffer之間可以相互轉(zhuǎn)換。當(dāng)需要較多修改操作時,將String對象轉(zhuǎn)換為StringBuffer對象,利用StringBuffer完成修改操作,最后再轉(zhuǎn)換為String對象。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐津县| 惠安县| 东方市| 合作市| 乃东县| 永德县| 景德镇市| 大悟县| 旬阳县| 乐山市| 淮南市| 晋江市| 威远县| 宜都市| 宁乡县| 昌乐县| 凤城市| 江津市| 北安市| 青河县| 樟树市| 海淀区| 资溪县| 诸城市| 新郑市| 佛山市| 大渡口区| 淳安县| 仙居县| 肇庆市| 鱼台县| 宜君县| 瑞丽市| 崇信县| 乌什县| 旺苍县| 东丰县| 延吉市| 常州市| 德州市| 陈巴尔虎旗|