日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分享:SringBuffer与String的区别

發布時間:2025/7/14 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享:SringBuffer与String的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  ·作為Java中最為基礎的部分,在Java的學習過程中,就一定會學習到字符串,其中String類作為字符串。并且在Java所有的程序中是使用字符串都是使用String類去實現。

  兩者存在一定的通性,都是可以儲存和操作字符串,即包含多個字符的字符串數據。

  但是StringBuffer與Sting的區別在哪里?

  下面將講述Sting與StringBuffer最為關鍵的區別之處在哪里?

  1、從字符串的內容是否可以被修改上

  String:字符串作為常量;則有一個這樣的通性,它們的值在創建之后不能更改。在字符串的數組中,String對象是不可以改變的,這是因為存在這樣的缺點也是具有一個與眾不同的有點,編譯器可以把字符串設立為共享。

  下面是String的表達式:

      String str = "abc";

    等效于:

      char data[] = {'a','b','c'};

      String str = new String(data);

  StringBuffer:StringBuffer類作為一個不同之處及優點在輔助類,可以在使用之前預先分配指定長度的內存塊建立一個字符串緩沖區,這樣的效益比String中需要每次都要開辟一個內存空間優于很多。StringBuffer是線程安全的,在多線程程序中也可以很方便去使用,但是相對于線程不安全的效率要稍低一點。

  2、從對象本身的改變上

  每次對 String 類型進行改變的時候其實都等同于生成了一個新的 String 對象,然后將指針指向新的 String 對象。

  每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。

  而在某些特別情況下, String 對象的字符串拼接其實是被 JVM 解釋成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度并不會比 StringBuffer 對象慢,而特別是以下的字符串對象生成中, String 效率是遠要比 StringBuffer 快的。如以下的例子:

  ?String S1 = “This is only a” + “ simple” + “ test”;
?  StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
?  你會很驚訝的發現,生成 String S1 對象的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不占優勢。其實這是 JVM 的一個把戲,在 JVM 眼里,這個
?  String S1 = “This is only a” + “ simple” + “test”; 其實就是:
?  String S1 = “This is only a simple test”; 所以當然不需要太多的時間了。

?

基于以上兩點區別,在大部分情況下,StringBuffer > String

  下面介紹一下StringBuffer中經常使用到的幾種方法:

  1、append方法

  public StringBuffer append(boolean b)
  該方法的作用是追加內容到當前StringBuffer對象的末尾,類似于字符串的連接。調用該方法以后,StringBuffer對象的內容也發生改變,例如:
  StringBuffer sb = new StringBuffer(“abc”);
  sb.append(true);
  則對象sb的值將變成”abctrue”。
  使用該方法進行字符串的連接,將比String更加節約內容,例如應用于數據庫SQL語句的連接,例如:
  StringBuffer sb = new StringBuffer();
  String user = “test”;
  String pwd = “123”;
  sb.append(“select * from userInfo where username=“)
  .append(user)
  .append(“ and pwd=”)
  .append(pwd);
  這樣對象sb的值就是字符串“select * from userInfo where username=test and pwd=123”。
  2、deleteCharAt方法
  public StringBuffer deleteCharAt(int index)
  該方法的作用是刪除指定位置的字符,然后將剩余的內容形成新的字符串。例如:
  StringBuffer sb = new StringBuffer(“Test”);
  sb. deleteCharAt(1);
  該代碼的作用刪除字符串對象sb中索引值為1的字符,也就是刪除第二個字符,剩余的內容組成一個新的字符串。所以對象sb的值變為”Tst”。
  還存在一個功能類似的delete方法:
  public StringBuffer delete(int start,int end)
  該方法的作用是刪除指定區間以內的所有字符,包含start,不包含end索引值的區間。例如:
  StringBuffer sb = new StringBuffer(“TestString”);
  sb. delete (1,4);
  該代碼的作用是刪除索引值1(包括)到索引值4(不包括)之間的所有字符,剩余的字符形成新的字符串。則對象sb的值是”TString”。
  3、insert方法
  public StringBuffer insert(int offset, String s)
  該方法的作用是在StringBuffer對象中插入內容,然后形成新的字符串。例如:
  StringBuffer sb = new StringBuffer(“TestString”);
  sb.insert(4,“false”);
  該示例代碼的作用是在對象sb的索引值4的位置插入字符串false,形成新的字符串,則執行以后對象sb的值是”TestfalseString”。
  4、reverse方法
  public StringBuffer reverse()
  該方法的作用是將StringBuffer對象中的內容反轉,然后形成新的字符串。例如:
  StringBuffer sb = new StringBuffer(“abc”);
  sb.reverse();
  經過反轉以后,對象sb中的內容將變為”cba”。
  5、setCharAt方法
  public void setCharAt(int index, char ch)
  該方法的作用是修改對象中索引值為index位置的字符為新的字符ch。例如:
  StringBuffer sb = new StringBuffer(“abc”);
  sb.setCharAt(1,’D’);
  則對象sb的值將變成”aDc”。
  6、trimToSize方法
  public void trimToSize()
  該方法的作用是將StringBuffer對象的中存儲空間縮小到和字符串長度一樣的長度,減少空間的浪費。
  7、構造方法:
  StringBuffer s0=new StringBuffer();分配了長16字節的字符緩沖區
  StringBuffer s1=new StringBuffer(512);分配了512字節的字符緩沖區
  8、獲取字符串的長度: length()
  StringBuffer s = new StringBuffer("www");
  int i=s.length();
  m.返回字符串的一部分值
  substring(int start) //返回從start下標開始以后的字符串
  substring(int start,int end) //返回從start到 end-1字符串
  9.替換字符串
  replace(int start,int end,String str)
  s.replace(0,1,"qqq");
  10.轉換為不變字符串:toString()。

轉載于:https://www.cnblogs.com/Zhuoshengda/p/7214264.html

總結

以上是生活随笔為你收集整理的分享:SringBuffer与String的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。