String類與StringBuffer類 一、String類和StringBuffer類的區別 String類是不可變類,新建的對象為不可變對象(String類的內容和長度是固定的),一旦被創建就不能修改它的值(對於已經存在的String對象的修改都是重新創建一個新的對象,然後把新的值保存進去);... ...
String類與StringBuffer類
一、String類和StringBuffer類的區別
String類是不可變類,新建的對象為不可變對象(String類的內容和長度是固定的),一旦被創建就不能修改它的值(對於已經存在的String對象的修改都是重新創建一個新的對象,然後把新的值保存進去); String類是final類型不可被繼承。
StringBuffer類是可變類,新建的對象是一個可變的對象,當需要修改其內容的時候,不需要再創建新的字元串對象,而是直接操作原來的串;不能通過賦值符號對他進行賦值(只能通過構造函數來建立, StringBuffer sb = new StringBuffer(),每個StringBuffer對象都有一定的緩衝區容量,當字元串大小超過容量時,會自動增加容量);字元串連接操作中StringBuffer的效率要比String高。
另外由於StringBuffer是線程安全的,所以在多線程程式中也可以很方便的進行使用,但是程式的執行效率相對來說就要稍微慢一些。從JDK5開始,為該類補充了一個單個線程使用的等價類,即StringBuilder。與該類相比,通常應該優先使用StringBuilder類,因為它支持所有相同的操作,但由於它不支持同步,所以速度更快。
String 作為參數傳遞是類似於基本數據類型作為參數傳遞(值傳遞),StringBuffer 作為參數傳遞就是引用數據類型傳遞。
總結一下:
相同點:
(1)String類與StringBuffer類都用來處理字元串。
(2)部分方法在二者中的用法是相同的。
(3)在這兩個類中,字元的索引都是從0開始的。
(4)這兩個類都是CharSequence的子類。CharSequence介面描述的是一系列字元集。
不同點:
(1)String類是不可變類,因為在底端是用字元數組實現的,而數組長度固定,一旦賦值,就不能在原來的字元串上進行修改可能會浪費空間。StringBuffer類是可變類,能夠在原來的數組上進行修改。
(2)String類覆蓋了Object類的equals()方法,而StringBuffer類沒有覆蓋該方法。比較StringBuffer字元串內容是否相等,可以使用toString() 方法將StringBuffer的內容轉換為String 字元串,再使用equals()方法比較。
(3)雖然兩個類都覆蓋了toString()方法,但各自的實現方式不同。String類的toString()方法返回當前String對象的引用。而StringBuffer類的toString()方法返回一個以當前StringBuffer的緩衝區的所有字元為內容的新的String對象的引用。
(4)String類對象可以用操作符"+"進行連接,而StringBuffer類的對象通過append()方法添加新的字元串。
二、StringBuffer對象和String對象之間的互轉
String s = "abc";
StringBuffer sb1 = new StringBuffer("123");
StringBuffer sb2 = new StringBuffer(s); //String轉換為StringBuffer
String s1 = sb1.toString(); //StringBuffer轉換為String |
三、StringBuffer類
1.StringBuffer的構造方法
public StringBuffer() 構造一個其中不帶字元的字元串緩衝區,其初始容量為 16 個字元。
public StringBuffer(int capacity):指定容量大小
public StringBuffer(String str):構造一個字元串緩衝區:裡面的容量(字元串內容英文)大小:字元串長度+16初始容量
使用append()方法在字元串後面追加東西的時候,如果長度超過了該字元串存儲空間大小了就自動進行擴容:構建新的存儲空間更大的字元串,將舊的複製過去;
在進行字元串append添加的時候,會先計算添加後字元串大小,傳入一個方法:ensureCapacityInternal 這個方法進行是否擴容的判斷,需要擴容就調用expandCapacity方法進行擴容:嘗試將新容量擴為大小變成2倍+2 ,判斷一下
容量如果不夠,直接擴充到需要的容量大小。
2.StringBuffer獲取功能
public int capacity():初始容量
public synchronized int length():返回字元串長度
3.StringBuffer的添加功能
StringBuffer append(xxx x):將指定的內容追加(末尾追加)到字元串緩衝區中,返回StringBuffer本身
public StringBuffer insert(int index,xxx x):在指定位置處,插入一個新的內容,返回StringBuffer本身
void setLength(int newLength)
重新設置字元串緩衝區中字元串的長度,如果newLength小於當前的字元串長度,將截去多餘的字元。
public void ensureCapacity (int minimumCapacity)
重新設置字元號串緩衝區的總空間。如果minimumCapacity大於當前的總空間,則新的空間被設置:一種結果是minimumCapacity;另一種結果是{"老空間"乘2加2}。
4.StringBuffer的刪除功能
StringBuffer deleteCharAt(int index) :刪除指定位置出的字元,返回字元串緩衝區本身
StringBuffer delete(int start, int end) :刪除從指定位置開始到指定位置結束,返回值字元串緩衝區本身
public void trimToSize()將StringBuffer對象的中存儲空間縮小到和字元串長度一樣的長度,減少空間的浪費。
5.StringBuffer的替換功能
public StringBuffer replace(int start,int end,String str):從指定位置開始到指定位置結束,用給定的str字元串替換指定的字元內容
public void setCharAt(int index, char ch):修改對象中索引值為index位置的字元為新的字元ch
6.StringBuffer的反轉功能
public StringBuffer reverse () 反轉功能
7.StringBuffer的截取功能
String substring(int start) :從指定位置預設截取到末尾,返回一個新的字元串
String substring(int start,int end):從指定位置開始截取到指定位置結束
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
從當前StringBuffer對象的索引號srcBegin開始,到srcEnd結束的子串,賦值到字元數組dst中,並且從dst的索引號dstBegin開始。
8. StringBuffer查找功能
int indexOf(String str) 返回當前StringBuffer對象中,第一個滿足str子串的位置。
int indexOf(String str, int fromIndex)
從當前StringBuffer對象的fromIndex開始查找,返回第一個滿足str子串的位置。
int lastIndexOf(String str)
返回當前StringBuffer對象中,最後一個滿足str子串的位置。
int lastIndexOf(String str, int fromIndex)
從當前StringBuffer對象的fromIndex開始查找,返回最後一個滿足str子串的位置。
四、String類方法(分類參考)
方法摘要 |
char | charAt(int index) 返回指定索引處的 char 值。 |
int | codePointAt(int index) 返回指定索引處的字元(Unicode 代碼點)。 |
int | codePointBefore(int index) 返回指定索引之前的字元(Unicode 代碼點)。 |
int | codePointCount(int beginIndex, int endIndex) 返回此 String 的指定文本範圍中的 Unicode 代碼點數。 |
int | compareTo(String anotherString) 按字典順序比較兩個字元串。 |
int | compareToIgnoreCase(String str) 按字典順序比較兩個字元串,不考慮大小寫。 |
String | concat(String str) 將指定字元串連接到此字元串的結尾。 |
boolean | contains(CharSequence s) 當且僅當此字元串包含指定的 char 值序列時,返回 true。 |
boolean | contentEquals(CharSequence cs) 將此字元串與指定的 CharSequence 比較。 |
boolean | contentEquals(StringBuffer sb) 將此字元串與指定的 StringBuffer 比較。 |
static String | copyValueOf(char[] data) 返回指定數組中表示該字元序列的 String。 |
static String | copyValueOf(char[] data, int offset, int count) 返回指定數組中表示該字元序列的 String。 |
boolean | endsWith(String suffix) 測試此字元串是否以指定的尾碼結束。 |
boolean | equals(Object anObject) 將此字元串與指定的對象比較。 |
boolean | equalsIgnoreCase(String anotherString) 將此 String 與另一個 String 比較,不考慮大小寫。 |
static String | format(Locale l, String format, Object... args) 使用指定的語言環境、格式字元串和參數返回一個格式化字元串。 |
static String | format(String format, Object... args) 使用指定的格式字元串和參數返回一個格式化字元串。 |
byte[] | getBytes() 使用平臺的預設字元集將此 String 編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中。 |
byte[] | getBytes(Charset charset) 使用給定的 charset 將此 String 編碼到 byte 序列,並將結果存儲到新的 byte 數組。 |
void | getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) 已過時。 該方法無法將字元正確轉換為位元組。從 JDK 1.1 起,完成該轉換的首選方法是通過 getBytes() 方法,該方法使用平臺的預設字元集。 |
byte[] | getBytes(String charsetName) 使用指定的字元集將此 String 編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中。 |
void | getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 將字元從此字元串複製到目標字元數組。 |
int | hashCode() 返回此字元串的哈希碼。 |
int | indexOf(int ch) 返回指定字元在此字元串中第一次出現處的索引。 |
int | indexOf(int ch, int fromIndex) 返回在此字元串中第一次出現指定字元處的索引,從指定的索引開始搜索。 |
int | indexOf(String str) 返回指定子字元串在此字元串中第一次出現處的索引。 |
int | indexOf(String str, int fromIndex) 返回指定子字元串在此字元串中第一次出現處的索引,從指定的索引開始。 |
String | intern() 返回字元串對象的規範化表示形式。 |
boolean | isEmpty() 當且僅當 length() 為 0 時返回 true。 |
int | lastIndexOf(int ch) 返回指定字元在此字元串中最後一次出現處的索引。 |
int | lastIndexOf(int ch, int fromIndex) 返回指定字元在此字元串中最後一次出現處的索引,從指定的索引處開始進行反向搜索。 |
int | lastIndexOf(String str) 返回指定子字元串在此字元串中最右邊出現處的索引。 |
int | lastIndexOf(String str, int fromIndex) 返回指定子字元串在此字元串中最後一次出現處的索引,從指定的索引開始反向搜索。 |
int | length() 返回此字元串的長度。 |
boolean | matches(String regex) 告知此字元串是否匹配給定的正則表達式。 |
int | offsetByCodePoints(int index, int codePointOffset) 返回此 String 中從給定的 index 處偏移 codePointOffset 個代碼點的索引。 |
boolean | regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 測試兩個字元串區域是否相等。 |
boolean | regionMatches(
您的分享是我們最大的動力!
-Advertisement-
更多相關文章
-
基本存儲單元 位(bit, b):二進位數中的一個數位,可以是0或者1,是電腦中數據的最小單位。 位元組(Byte,B):電腦中數據的基本單位,每8位組成一個位元組。 1B = 8b 各種信息在電腦中存儲、處理,至少需要一個位元組的空間。 位元組與字元 電腦存儲的一切數據都是由一串 0 和 1 組成 ...
-
今天是2020年2月6日,時間過得好快,以至於我在寫到時間會下意識寫成2019年…… 看來全國肺炎情況進一步升溫了,以至於我家所在的小區進行了命令封鎖通知,所以出行不再像以前那麼自由了,不管怎樣,給戰鬥在一線的抗肺炎醫生們以及相關工作人員加油打氣。 言歸正傳,今天完成了有關python學習過程中的一 ...
-
學習pandas兩天了,關於這個增加行的問題一直困擾著我,測試了幾個代碼,終於搞通了一點(昨天是因為代碼敲錯了。。。) 直接上代碼: 1 dates = pd.date_range('20170101',periods=6) 2 df1 = pd.DataFrame(np.arange(24).re ...
-
| A | B | C | D | E | F | G | H | I | J | | : : | : : | : : | : : | : : | : : | : : | : : | : : | : : | | $\checkmark$ | $\checkmark$ | $O$ | $\checkm ...
-
前言 CountDownLatch是什麼? CountDownLatch是具有synchronized機制的一個工具,目的是讓一個或者多個線程等待,直到其他線程的一系列操作完成。 CountDownLatch初始化的時候,需要提供一個整形數字,數字代表著線程需要調用countDown()方法的次數, ...
-
這裡簡單理解:簡單工廠又叫靜態工廠;是將工廠方法的方法體加上static 問題來了,什麼是開閉原則?又有哪些設計原則呢? 開閉原則就是說對擴展開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程式的擴展性好,易於維護和升級。想要達到這樣 ...
-
二叉樹的基本操作,為 二叉查找(搜索、排序)樹、二叉平衡樹(AVL樹)、紅黑樹 等提供基礎介面。 名稱空間:namespace BTO 基礎介面如: ① 遍歷操作: 遞歸 和 非遞歸 版本的 先序、中序、後序 遍歷。 層序遍歷。 介面原型:void xxxTraversal(_Node*& _nod ...
-
原文地址:https://www.cnblogs.com/xrq730/p/5060921.html 1、多線程有什麼用? 一個可能在很多人看來很扯淡的一個問題:我會用多線程就好了,還管它有什麼用?在我看來,這個回答更扯淡。所謂"知其然知其所以然","會用"只是"知其然","為什麼用"才是"知其所以 ...
一周排行
-Advertisement-
-
移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
-
前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
-
項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
-
話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
-
前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
-
Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
-
目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
-
1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
-
本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
-
通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...
|