在最新的軟件研發(fā)領(lǐng)域中,Java認(rèn)證排在了第一位,因此每年都會(huì)有大量的人員參加Java認(rèn)證考試,為了幫助廣大考生更好的把握考試要點(diǎn),唯學(xué)小編特整理了Java認(rèn)證考試輔導(dǎo)內(nèi)容,主要為考生詳細(xì)介紹了String三種加法的區(qū)別,具體內(nèi)容如下:
java它提供了如此豐富的library,讓程序員能夠很容易的寫出功能強(qiáng)大的程序。同時(shí)它也封裝了如此多的細(xì)節(jié),讓程序員能夠輕易的寫出很拙劣的程序。它所代表的object指向思想設(shè)計(jì)之初是為了把程序員從紛繁復(fù)雜的編程細(xì)節(jié)中解放出來,來達(dá)到對已有程序的利用。但是在編程實(shí)際上又要求程序員了解其實(shí)現(xiàn)的細(xì)節(jié),而避免寫出因調(diào)用已有l(wèi)ibrary不正引起的performance慢的、耗費(fèi)系統(tǒng)資源多的程序。
通常成為一個(gè)優(yōu)秀的Java程序員需要較長時(shí)間的經(jīng)驗(yàn)積累,包括從程序的tuning中或從其他有經(jīng)驗(yàn)的程序員口中,才知道一定功能需要怎樣實(shí)現(xiàn),在程序中需要避免那些問題。但這往往是比較片面的,知其然而不知其所以然。我想大多數(shù)程序員都有類似的經(jīng)歷,舉一個(gè)簡單的例子,下面有三種對String的累加操作。
①String tmp = "a" + "b" + "c";
②String tmp = null;
tmp+= "a";
tmp+= "b";
tmp+= "c";
③String tmp = null;
StringBuffer buf = new StringBuffer();
buf.append("a");
buf.append("b");
buf.append("c");
tmp = buf.toString();
有些Java程序員在任意的用這三種方法的任一種,無視它們的區(qū)別。有些程序員知道第三種方法好,一直在用而不知其為什么好,以至于作為經(jīng)驗(yàn)教條的傳授給Java新手。真正的答案是什么呢?讓我們揭開Java String Class和StringBuffer Class的封裝面紗,看看它的內(nèi)部實(shí)現(xiàn)。在Java中的String Class是一個(gè)不可變類,所有對一個(gè)Sting Object的改變都會(huì)導(dǎo)致一個(gè)新的String Object的生成。那么對tmp+=a中+符號的實(shí)現(xiàn)呢?
如果你注意一下StringBuffer的Javadoc會(huì)發(fā)現(xiàn),JDK對它的實(shí)現(xiàn)是:tmp=(new StringBuffer()。append(tmp)。append("a"))。toSting();這樣我們發(fā)現(xiàn)②這種方法在隱性生成了一個(gè)StringBuffer Object和一個(gè)String Object 再乘3就是六個(gè)object 的資源耗費(fèi)。(還不包括String Class和StringBuffer Class內(nèi)部使用的Char[])。而方法③只用了兩個(gè)。也許有些程序員會(huì)對這些耗費(fèi)不以為然,的確也是,不過在一些場景下它會(huì)成為perfamence的瓶頸。再回頭看看①這種方法,它會(huì)被Java編譯器編譯為:tmp=(new StringBuffer()。append("a")。append("b")。append("c"))。to String();我們發(fā)現(xiàn)做的和③方法是同樣的事。
唯學(xué)網(wǎng)是一個(gè)大型的教育考試培訓(xùn)平臺(tái),更多Java認(rèn)證考試考試報(bào)名,Java認(rèn)證考試準(zhǔn)考證和成績查詢等相關(guān)考試信息,請關(guān)注唯學(xué)網(wǎng)職業(yè)資格欄目IT認(rèn)證考試培訓(xùn)頻道。小編在此預(yù)祝每一位參加Java認(rèn)證考試的考生都能夠順利通過,早日實(shí)現(xiàn)自己的夢想。
|
|
||
|
|
||
|
|