一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

java語(yǔ)言

Java StringBuffer與StringBuider

時(shí)間:2025-02-12 12:49:00 java語(yǔ)言 我要投稿
  • 相關(guān)推薦

Java StringBuffer與StringBuider

  導語(yǔ):Java是一門(mén)面向對象編程語(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強大和簡(jiǎn)單易用兩個(gè)特征。下面我們來(lái)看看Java StringBuffer與StringBuider,希望對大家有所幫助。

  String 的值是不可變的,每次對String的操作都會(huì )生成新的String對象,不僅效率低,而且耗費大量?jì)却婵臻g。

  StringBuffer類(lèi)和String類(lèi)一樣,也用來(lái)表示字符串,但是StringBuffer的內部實(shí)現方式和String不同,在進(jìn)行字符串處理時(shí),不生成新的對象,在內存使用上要優(yōu)于String。

  StringBuffer 默認分配16字節長(cháng)度的緩沖區,當字符串超過(guò)該大小時(shí),會(huì )自動(dòng)增加緩沖區長(cháng)度,而不是生成新的對象。

  StringBuffer不像String,只能通過(guò) new 來(lái)創(chuàng )建對象,不支持簡(jiǎn)寫(xiě)方式,例如:

1

     

  StringBuffer str1 = new StringBuffer(); // 分配16個(gè)字節長(cháng)度的緩沖區

  StringBuffer str2 = =new StringBuffer(512); // 分配512個(gè)字節長(cháng)度的緩沖區

  // 在緩沖區中存放了字符串,并在后面預留了16個(gè)字節長(cháng)度的空緩沖區

  StringBuffer str3 = new StringBuffer("www.weixueyuan.net");

  StringBuffer類(lèi)的主要方法

  StringBuffer類(lèi)中的方法主要偏重于對于字符串的操作,例如追加、插入和刪除等,這個(gè)也是StringBuffer類(lèi)和String類(lèi)的主要區別。實(shí)際開(kāi)發(fā)中,如果需要對一個(gè)字符串進(jìn)行頻繁的修改,建議使用 StringBuffer。

  1) append() 方法

  append() 方法用于向當前字符串的末尾追加內容,類(lèi)似于字符串的連接。調用該方法以后,StringBuffer對象的內容也發(fā)生改變,例如:

1

     

  StringBuffer str = new StringBuffer(“biancheng100”);

  str.append(true);

  則對象str的值將變成”biancheng100true”。注意是str指向的內容變了,不是str的指向變了。

  字符串的”+“操作實(shí)際上也是先創(chuàng )建一個(gè)StringBuffer對象,然后調用append()方法將字符串片段拼接起來(lái),最后調用toString()方法轉換為字符串。

  這樣看來(lái),String的連接操作就比StringBuffer多出了一些附加操作,效率上必然會(huì )打折扣。

  但是,對于長(cháng)度較小的字符串,”+“操作更加直觀(guān),更具可讀性,有些時(shí)候可以稍微犧牲一下效率。

  2) CharAt()

  CharAt() 方法用來(lái)刪除指定位置的字符,并將剩余的字符形成新的字符串。例如:

1

     

  StringBuffer str = new StringBuffer("abcdef");

  str. CharAt(3);

  該代碼將會(huì )刪除索引值為3的字符,即”d“字符。

  你也可以通過(guò)()方法一次性刪除多個(gè)字符,例如:

1

     

  StringBuffer str = new StringBuffer("abcdef");

  str.(1, 4);

  該代碼會(huì )刪除索引值為1~4之間的字符,包括索引值1,但不包括4。

  3) () 方法

  () 用來(lái)在指定位置插入字符串,可以認為是append()的升級版。例如:

1

     

  StringBuffer str = new StringBuffer("abcdef");

  str.(3, "xyz");

  最后str所指向的字符串為 abcdxyzef。

  4)setCharAt() 方法

  setCharAt() 方法用來(lái)修改指定位置的字符。例如:

1

     

  StringBuffer str = new StringBuffer("abcdef");

  str.setCharAt(3, 'z');

  該代碼將把索引值為3的字符修改為 z,最后str所指向的字符串為 abczef。

  以上僅僅是部分常用方法的簡(jiǎn)單說(shuō)明,更多方法和解釋請查閱API文檔。

  String和StringBuffer的效率對比

  為了更加明顯地看出它們的執行效率,下面的代碼,將26個(gè)英文字母加了10000次。

1

     

  public class Demo {

  public static void main(String[] args){

  String fragment = "abcdefghijklmnopqrstuvwxyz";

  int times = 10000;

  // 通過(guò)String對象

  long timeStart1 = System.currentTimeMillis();

  String str1 = "";

  for (int i=0; i str1 += fragment;

  }

  long timeEnd1 = System.currentTimeMillis();

  System.out.println("String: " + (timeEnd1 - timeStart1) + "ms");

  // 通過(guò)StringBuffer

  long timeStart2 = System.currentTimeMillis();

  StringBuffer str2 = new StringBuffer();

  for (int i=0; i str2.append(fragment);

  }

  long timeEnd2 = System.currentTimeMillis();

  System.out.println("StringBuffer: " + (timeEnd2 - timeStart2) + "ms");

  }

  }

  運行結果:

  String: 5287ms

  StringBuffer: 3ms

  結論很明顯,StringBuffer的執行效率比String快上千倍,這個(gè)差異隨著(zhù)疊加次數的增加越來(lái)越明顯,當疊加次數達到30000次的時(shí)候,運行結果為:

  String: 35923ms

  StringBuffer: 8ms

  所以,強烈建議在涉及大量字符串操作時(shí)使用StringBuffer。

  StringBuilder類(lèi)

  StringBuilder類(lèi)和StringBuffer類(lèi)功能基本相似,方法也差不多,主要區別在于StringBuffer類(lèi)的方法是多線(xiàn)程安全的,而StringBuilder不是線(xiàn)程安全的,相比而言,StringBuilder類(lèi)會(huì )略微快一點(diǎn)。

  StringBuffer、StringBuilder、String中都實(shí)現了CharSequence接口。

  CharSequence是一個(gè)定義字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start, int end) 這幾個(gè)API。

  StringBuffer、StringBuilder、String對CharSequence接口的實(shí)現過(guò)程不一樣,如下圖所示:

  圖1 對CharSequence接口的實(shí)現

  可見(jiàn),String直接實(shí)現了CharSequence接口;StringBuilder 和 StringBuffer都是可變的字符序列,它們都繼承于A(yíng)bstractStringBuilder,實(shí)現了CharSequence接口。

  總結

  線(xiàn)程安全:

  StringBuffer:線(xiàn)程安全StringBuilder:線(xiàn)程不安全

  速度:

  一般情況下,速度從快到慢為 StringBuilder > StringBuffer > String,當然這是相對的,不是絕對的。

  使用環(huán)境:

  操作少量的數據使用 String;單線(xiàn)程操作大量數據使用 StringBuilder;多線(xiàn)程操作大量數據使用 StringBuffer。

【Java StringBuffer與StringBuider】相關(guān)文章:

JAVA編程String和StringBuffer07-01

java中String和StringBuffer的區別08-01

Java與Java web的區別09-30

淺談Java語(yǔ)言與Java 技術(shù)09-22

談Java語(yǔ)言與Java技術(shù)的介紹09-20

java教程之Java編程基礎09-12

Java與Java web有什么不同08-26

Java 繼承07-04

Java的類(lèi)07-19

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看