小碼哥杯java程式比賽複習 十 常用類 中

2021-07-24 04:39:05 字數 2341 閱讀 8896

一.stringbuilder類和stringbuffer類

在第九節中我們講過,string類是不可變類,即一旦乙個string物件被建立後,包含在這個物件中的字串行是不可改變的,直至這個這個物件被銷毀。簡單的說,就是string是不可變的物件,因此在每次對string型別進行改變的時候其實都等同於生成了乙個新的string物件,然後將指標指向了新的string物件,所以經常改變內容的字串最好不要用string,因為每次產生物件時都會對系統的效能產生影響,特別是當記憶體中無引用物件多了以後,jvm的gc就開始工作,那速度是一定會相當慢的。

而stringbuffer和stringbuilder就不一樣啦,stringbuffer物件代表乙個字串行可變的字串,當乙個stringbuffer被建立後,通過stringbuffer提供的方法可以改變這個字串物件的字串行。一旦通過stringbuffer生成了最終想要的字串,就可以呼叫它的tostring()方法將其轉換為乙個string物件。

stringbuffer類建立的字串每次都會對stringbuffer物件本身進行操作,而不是生成新的物件,再改變物件引用。所以在一般情況下都推薦使用stringbuffer,特別是字串經常改變的情況下。而在某些情況下,string物件的字串拼接其實是被jvm解釋成了stringbuffer物件的拼接,所以這些時候string物件的速度並不會比stringbuffer物件慢,而特別是以下的字串物件生成中,string效率是要遠比stringbuffer快的:

例1:

string s1 ="this is a"+"fine"+"day";

在這個例子中,string建立的物件s1的速度要遠遠快於stringbuffer建立的物件sb,這是因為這個string建立時鏈結的字串都是常量字串,所以是對於指向同乙個字串所進行的改變,如果string s1連線的是另乙個字串變數的話,速度就沒有這麼快了。

stringbuilder類也代表了字串物件,實際上,stringbuilder和stringbuffer基本相似,兩個類的構造器和方法基本相同。所不同的是,stringbuffer是執行緒安全的,而stringbuilder則沒有實現執行緒安全功能,所以效能略高。因此在一般情況下,stringbuilder>stringbuffer>string;

下面的例子建立了乙個stringbuilder物件:

例2:

public class helloworld 

}

二.stringbuilder類的常用方法

stringbuilder類提供了許多方法,具體參照api,這裡只列出四種比較重要的:

insert(位置,引數)  將內容插入到stringbuilder物件的指定位置;

tostring()  將stringbuilder物件轉換為string物件

length()  獲取字串的長度

下面的例3中,建立了stringbuilder物件,用來儲存字串,並對其做了追加和插入操作。這些操作修改了str物件的值,而沒有建立新的物件,這就是stringbuilder和string最大的區別:

例3:

public class helloworld 

}

執行結果為:

字串長度:14

插入前: helloworld1111

插入後:helloworld!1111

最後再通過例4的練習來加深對stringbuffer和stringbuilder的理解:

例4:將乙個由數字組成的字串轉換成指定格式--從右邊開始每三個字母用逗號分隔的形式。

public class helloworld 

system.out.println("插入後4在字串中的位置:"+str.indexof("4"));

system.out.println("現在的字串長度"+str.length());

// 將stringbuilder物件轉換為string物件並輸出

system.out.print(str.tostring());

}}

執行結果:

原來4在字串中的位置:4

原來字串的長度:7

插入後4在字串中的位置:6

現在的字串長度9

0,123,456

至此,string類結束,其他date類等明天總結,該高數時間了,明天見~

小碼哥C 彙編指令

我們先來隨便寫乙個函式,然後反彙編看看它的 include using namespace std void test void func intmain 轉到彙編為 再按一下f11 再按一下f11,跳轉到函式 儲存位元組 int a 1 ebp 0ch是變數a的位址 word 2位元組 dword...

小碼哥第三天筆記

了解 運算子基本概念 理解 運算子分類 運算子根據參與運算的運算元的個數分為 雙目運算 三目運算 理解 優先順序 理解 結合性 理解 算術運算子 掌握 結合性和優先順序 掌握 算術運算的注意點 名稱 符號說明 加法運算子 雙目運算子,即應有兩個量參與加法運算。如a b,4 8等。具有左結合性。減法運...

小碼哥C 第一課

標準格式 include using namespace std intmain 2.函式過載 c語言中不支援函式過載,但大多數語言中都支援函式過載 include using namespace std 引數型別 引數數量過載 sum i i intsum int v1,int v2 sum i ...