- 相關(guān)推薦
Java中String三種加法的區別
java提供了如此豐富的library,讓程序員能夠很容易的寫(xiě)出功能強大的程序。同時(shí)它也封裝了如此多的細節,讓程序員能夠輕易的寫(xiě)出很拙劣的程序。那么java對三種對String的累加操作方法有哪些?下面一起來(lái)看看吧!
java所代表的object指向思想設計之初是為了把程序員從紛繁復雜的編程細節中解放出來(lái),來(lái)達到對已有程序的利用。但是在編程實(shí)際上又要求程序員了解其實(shí)現的細節,而避免寫(xiě)出因調用已有library不正引起的performance慢的、耗費系統資源多的程序。
通常成為一個(gè)優(yōu)秀的Java程序員需要較長(cháng)時(shí)間的經(jīng)驗積累,包括從程序的tuning中或從其他有經(jīng)驗的程序員口中,才知道一定功能需要怎樣實(shí)現,在程序中需要避免那些問(wèn)題。但這往往是比較片面的,知其然而不知其所以然。我想大多數程序員都有類(lèi)似的經(jīng)歷,舉一個(gè)簡(jiǎn)單的例子,下面有三種對String的累加操作。
、賁tring tmp = "a" + "b" + "c";
、赟tring tmp = null;
tmp+= "a";
tmp+= "b";
tmp+= "c";
、跾tring tmp = null;
StringBuffer buf = new StringBuffer();
buf.append("a");
buf.append("b");
buf.append("c");
tmp = buf.toString();
有些Java程序員在任意的用這三種方法的任一種,無(wú)視它們的區別。有些程序員知道第三種方法好,一直在用而不知其為什么好,以至于作為經(jīng)驗教條的傳授給Java新手。真正的答案是什么呢?讓我們揭開(kāi)Java String Class和StringBuffer Class的封裝面紗,看看它的內部實(shí)現。在Java中的String Class是一個(gè)不可變類(lèi),所有對一個(gè)Sting Object的改變都會(huì )導致一個(gè)新的String Object的生成。那么對tmp+=a中+符號的實(shí)現呢?
如果你注意一下StringBuffer的Javadoc會(huì )發(fā)現,JDK對它的實(shí)現是:tmp=(new StringBuffer()。append(tmp)。append("a"))。toSting();這樣我們發(fā)現②這種方法在隱性生成了一個(gè)StringBuffer Object和一個(gè)String Object 再乘3就是六個(gè)object 的資源耗費。(還不包括String Class和StringBuffer Class內部使用的Char[])。而方法③只用了兩個(gè)。也許有些程序員會(huì )對這些耗費不以為然,的確也是,不過(guò)在一些場(chǎng)景下它會(huì )成為perfamence的瓶頸。再回頭看看①這種方法,它會(huì )被Java編譯器編譯為:tmp=(new StringBuffer()。append("a")。append("b")。append("c"))。to String();我們發(fā)現做的和③方法是同樣的事。
【Java中String三種加法的區別】相關(guān)文章:
Java與Java web的區別08-10
關(guān)于Java中Queue和BlockingQueue的區別07-23
javascript中String對象的slice()方法09-27
JAVA和.NET開(kāi)發(fā)過(guò)程中的區別10-25
Java和PHP的區別08-21
PHP和Java的區別09-06
j2ee與java的區別08-10
j2ee與java web的區別09-19