String中三種加法的區別
String中三種加法的區別JAVA的確是一種令程式設計師陷入兩難境地的言語, 確切的說是思想. 它提供瞭如此豐富的library,讓程式設計師能夠很容易的寫出功能強大的程式. 同時它也封裝瞭如此多的細節, 讓程式設計師能夠輕易的寫出很拙略的程式. 它所代表的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(); buf.append("a"); buf.append("b"); buf.append("c"); tmp = buf.toString(); 有些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();我們發現做的和③方法是同樣的事.
相關文章
- Redis 中三種特殊的資料型別Redis資料型別
- 關於HTMLObject中三個Style例項的區別HTMLObject
- String str=null; 和String str=""的區別Null
- String a = "abc" 與String b = new String("abc")的區別
- String s = “hello“和String s = new String(“hello“)的區別
- C#中String和string區別C#
- String.valueOf和強制型別轉換(String)的區別型別
- Java中三種常用的排序方法Java排序
- StringBuilder和String 的區別?UI
- StringBuilder和String的區別UI
- String和StringBuilder的區別UI
- Go 中 type var string 和 type var = string 的區別Go
- rac的Oracle Net配置中三種模式Oracle模式
- 在xpath中text()和string(.)的區別
- Rust中 String、str、&str、char 的區別Rust
- UIModalPresentationStyle 各種型別的區別UI型別
- .NetCore中三種注入方式的思考NetCore
- smarty中三種變數的訪問方式變數
- Java之String的equals與contentEquals區別Java
- String,StringBuilder,StringBuffer的區別UI
- String、StringBuilder、StringBuffer的區別UI
- 67. StringBuilder和String 的區別?UI
- String StringBuild StringBuffer的區別UI
- C語言中Pointer, Array,String and Structures的區別C語言Struct
- 關於String與StringBuffer的區別
- String、StringBuffer、StringBuilder的區別UI
- JAVA中String與StringBuffer的區別Java
- Object類和String類equals方法的區別Object
- Java String.valueOf 和 toString的區別Java
- 不要再問我js和jq中三大家族的區別了~~JS
- 掌握oracle與SQL區別用一加法運算來學習OracleSQL
- String,StringBuffer與StringBuilder的區別UI
- String、StringBuffer、與StringBuilder的區別UI
- String,StringBuffer與StringBuilder的區別??UI
- 在tomcat中三種部署專案的方法Tomcat
- String、StringBuffer、StringBuilder區別?UI
- String,StringBuffer,StringBuilder區別UI
- vmware中三種網路連線方式