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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

String problem and StringBuilder

發布時間:2024/1/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 String problem and StringBuilder 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、String存在的問題

Java開辟了兩類存儲區域,分別是棧和堆:

存儲區域存儲內容優點缺點回收
基本類型的變量和對象的引用變量存取速度比堆要快,僅次于寄存器,棧數據可以共享存在棧中的數據大小與生存期必須是確定的,缺乏靈活性。棧中主要存放一些基本類型的變量當超過變量的作用域后,Java會自動釋放掉該變量,內存空間可以立即被另作他用
由new等指令創建的對象和數組可以動態地分配內存大小,生存期也不必事先告訴編譯器由于要在運行時動態分配內存,存取速度較慢由Java虛擬機的自動垃圾回收器來回收不再使用的數據

我們在學習前需要先了解Java對象和引用變量,這更有利于之后理解String中存在的問題

請記住,String類是不可改變的,一旦創建String對象,那它的值就無法改變了



此處我們創建兩個變量str1和str2,

將其相加后,并非更改了原本引用變量str1指向的堆中String對象內容,

而是重新開辟了一塊新空間,用來存放相加后的“HelloWorld”內容,

并將原本指向“Hello”空間的引用變量str1(指針)指向了“HelloWorld”這塊空間。

此時原本str1指向的那塊空間“Hello”并沒有被銷毀,

而是在一段時間后由垃圾回收機制自動進行處理,

如果我們需要對很多字符串進行頻繁操作的時候,

這種模式下在單位時間內顯然是十分耗費內存空間



二、StringBuilder以及鏈式調用

為解決上面提出的問題,可以使用StringBuffer 和 StringBuilder 類。

和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,并且不產生新的未使用對象。


StringBuilder 的方法不是線程安全的(不能同步訪問),

但StringBuilder 相較于 StringBuffer 有速度優勢,

所以多數情況下建議使用 StringBuilder 類。


嘗試使用StringBuilder:
(引用菜鳥教程中例子,其實質是操作一個線性表)

public class RunoobTest{public static void main(String args[]){StringBuilder sb = new StringBuilder(10);sb.append("Runoob..");System.out.println(sb); sb.append("!");System.out.println(sb); sb.insert(8, "Java");System.out.println(sb); sb.delete(5,8);System.out.println(sb); } }



自己寫一個例子:

package com.google.study.string;import org.junit.Test;public class StringBuilderTest {@Testpublic void demo(){StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("Hello");stringBuilder.append(" world");System.out.println(stringBuilder);} }

總結

以上是生活随笔為你收集整理的String problem and StringBuilder的全部內容,希望文章能夠幫你解決所遇到的問題。

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