Java中String三種加法的區別
java提供瞭如此豐富的library,讓程序員能夠很容易的寫出功能強大的程序。同時它也封裝瞭如此多的細節,讓程序員能夠輕易的寫出很拙劣的程序。那麼java對三種對String的累加操作方法有哪些?下面一起來看看吧!
java所代表的object指向思想設計之初是為了把程序員從紛繁複雜的編程細節中解放出來,來達到對已有程序的利用。但是在編程實際上又要求程序員瞭解其實現的細節,而避免寫出因調用已有library不正引起的performance慢的、耗費系統資源多的程序。
通常成為一個優秀的Java程序員需要較長時間的經驗積累,包括從程序的tuning中或從其他有經驗的程序員口中,才知道一定功能需要怎樣實現,在程序中需要避免那些問題。但這往往是比較片面的,知其然而不知其所以然。我想大多數程序員都有類似的經歷,舉一個簡單的例子,下面有三種對String的累加操作。
①String tmp = "a" + "b" + "c";
②String tmp = null;
tmp+= "a";
tmp+= "b";
tmp+= "c";
③String tmp = null;
StringBuffer buf = new StringBuffer();
nd("a");
nd("b");
nd("c");
tmp = ring();
有些Java程序員在任意的用這三種方法的任一種,無視它們的'區別。有些程序員知道第三種方法好,一直在用而不知其為什麼好,以至於作為經驗教條的傳授給Java新手。真正的答案是什麼呢?讓我們揭開Java String Class和StringBuffer Class的封裝面紗,看看它的內部實現。在Java中的String Class是一個不可變類,所有對一個Sting Object的改變都會導致一個新的String Object的生成。那麼對tmp+=a中+符號的實現呢?
如果你注意一下StringBuffer的Javadoc會發現,JDK對它的實現是:tmp=(new StringBuffer()。append(tmp)。append("a"))。toSting();這樣我們發現②這種方法在隱性生成了一個StringBuffer Object和一個String Object 再乘3就是六個object 的資源耗費。(還不包括String Class和StringBuffer Class內部使用的Char[])。而方法③只用了兩個。也許有些程序員會對這些耗費不以為然,的確也是,不過在一些場景下它會成為perfamence的瓶頸。再回頭看看①這種方法,它會被Java編譯器編譯為:tmp=(new StringBuffer()。append("a")。append("b")。append("c"))。to String();我們發現做的和③方法是同樣的事。
-
計算機二級java筆試試題及答案
計算機二級考試《JAVA》習題1[單選題]哪個佈局管理器使用的是組件的最佳尺寸?()LayoutLayoutLayout參考答案:A2[單選題]Frame的默認的佈局管理器是下列哪一個?()LayoutLayoutLayout參考答案:B3[單選題]下列哪個用户圖形界面組件在軟件安裝程序中是常見的?()A.滑...
-
Java基礎知識點歸納
對於剛剛接觸Java的人,java基礎知識技術點繁多,那麼yjbys小編為大家彙總最全java知識點如下,僅供大家參考學習!1.JVM相關(包括了各個版本的特性)對於剛剛接觸Java的人來説,JVM相關的知識不一定需要理解很深,對此裏面的概念有一些簡單的瞭解即可。不過對於一個有着3...
-
JAVA認證基礎知識:近似算法(格雷厄姆算法)簡介
之前做了很多貪心算法,他們都能找到最優解,這也是之所以用貪心算法的原因。貪心算法較之其他,最大的優勢體現在時間複雜度低,空間複雜度也比較低。對於試用貪心算法的題型,有兩個重要特徵:貪心策略與最優子結構。貪心策略即每步採取策略的依據;最優子結構則是指問題...
-
Java獲取當前的系統時間的方法
在java中,我們可以利用程序獲取當前的'系統時間,那麼你知道該怎麼獲取嗎?下面跟yjbys小編一起來學習一下吧!一、獲取當前系統時間和日期並格式化輸出:import;importleDateFormat;publicclassNowString{publicstaticvoidmain(String[]args){SimpleDateFormatdf=ne...