asp.net C# string 與 stringBuffer (1/2)

來源:互聯網
上載者:User

asp教程.net c# string 與 stringbuffer

關鍵點
    1). 簡單的認為 .append() 效率好於 "+" 是錯誤的!
    2). 不要使用 new 建立 string
    3). 注意 .intern() 的使用
    4). 在編譯期能夠確定字串值的情況下,使用"+"效率最高
    5). 避免使用 "+=" 來構造字串
    6). 在聲明stringbuffer對象的時候,指定合適的capacity,不要使用預設值


首先我們必須清楚的一點是string類是final類型的,因此你不可以繼承這個類、不能修改這個類。我們使用string的時候非常簡單,通常都是string s = "hello",但是java api中同時提供了一個建構函式為string(string s),因此你也可以這樣使用string s = new string("hello"),對於後面這樣初始化一個string的方式是不推薦的,因為new操作符意味著將會在heap上產生一個新的對象,如果這樣的操作發生在一個迴圈中,那麼代價是慘重的。比如
for(int i = 0;i<1000;i++)
{
    string s = new string("hello");
}
    這將會建立1000個string類型的對象,由於string類是final的,因此這樣的操作事實上是每次都產生了一個新的string對象的。如果你使用string s = "hello";那麼就可以實現複用了,為什麼可以複用呢,下面會有解釋:
string s = "hello";
jvm先根據內容"hello"尋找對象,如果沒有找到,則在heap上建立新對象,並將其賦予s1,否則使用已經存在的對象
string s = new string("hello");
jvm直接在heap上建立新的對象,所以在heap中會出現內容相同,地址不同的string對象
stringbuffer是產生一塊記憶體空間,進行相干的增刪改操作都在這塊可擴充的記憶體上來操作,所以它對記憶體空間的消耗是有最佳化的,特別是在迴圈中
效率:string 與 stringbuffer
    情景1:
    (1) string result = "hello" + " world";
    (2) stringbuffer result = new string().append("hello").append(" world");
        (1) 的效率好於 (2),不要奇怪,這是因為jvm會做如下處理
        編譯前   string result = "hello" + " world";
        編譯後   string result = "hello world";

首頁 1 2 末頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.