關(guān)鍵點(diǎn)一
在編碼過(guò)程中设易,最好是能重用已經(jīng)建立的對(duì)象巢墅,而不是每次用到都要新建對(duì)象迁酸。在這里重用是指對(duì)象是不可變的讲冠,那就可以直接反復(fù)調(diào)用瓜客。
舉一個(gè)錯(cuò)誤的例子:
String s = new String("word");
系統(tǒng)在每次調(diào)用該語(yǔ)句的時(shí)候都會(huì)創(chuàng)建一個(gè)對(duì)象,而“word”本身就是一個(gè)對(duì)象實(shí)例,沒(méi)必要再以這種形式定義了谱仪。其實(shí)這是畫(huà)蛇添足的表現(xiàn)玻熙。只需要如下形式便可以:
String s = "word";
程序凡是運(yùn)行在同一臺(tái)虛擬機(jī)中,遇到相同的字符集都會(huì)調(diào)用它芽卿,并不會(huì)新建對(duì)象揭芍。
關(guān)鍵點(diǎn)二
在此之前我們先來(lái)鞏固一下裝箱和拆箱的概念胳搞。
裝箱:數(shù)據(jù)基本類(lèi)型轉(zhuǎn)換成對(duì)象類(lèi)型的操作;
拆箱:是裝箱的逆過(guò)程卸例。
自動(dòng)裝箱和自動(dòng)拆箱就是上述過(guò)程的隱式操作。
舉兩個(gè)簡(jiǎn)單的例子:
Integer i = 10;//自動(dòng)裝箱
int t = i; //拆箱肌毅,實(shí)際上執(zhí)行了 int t = i.intValue();
明白兩個(gè)基本的概念后筷转,我們?cè)賮?lái)看下面。
對(duì)于同時(shí)提供了靜態(tài)工廠方法和構(gòu)造器的不可變類(lèi)悬而,通常是使用靜態(tài)工廠方法而不是構(gòu)造器呜舒,這樣便可避免不必要的對(duì)象建立。
在JDK1.5中引入了自動(dòng)裝箱的概念笨奠,這一機(jī)制可以創(chuàng)建多余的對(duì)象袭蝗,所以要避免運(yùn)用裝箱類(lèi)型。
關(guān)鍵點(diǎn)三
千萬(wàn)不要錯(cuò)誤地認(rèn)為般婆,要盡量少得創(chuàng)建對(duì)象到腥。JVM可以方便地回收一些小對(duì)象,它們并不影響系統(tǒng)的性能蔚袍,反而會(huì)改善程序的簡(jiǎn)潔性乡范、清晰性,讓別人更容易理解啤咽。對(duì)于像數(shù)據(jù)庫(kù)連接池這樣珍貴的資源晋辆,我們要小心地創(chuàng)建新的對(duì)象。